URLオブジェクト

ブラウザーの組み込み URL オブジェクトは Web アドレスを表します。このオブジェクトを通じて、URL を生成および操作できます。

コンストラクター

URL は、インスタンス オブジェクトを生成するためのコンストラクターとして使用できます。

URL 文字列をパラメータとして受け取ります。

let url = 新しい URL('https://example.com');

URL 文字列を解析できない場合はエラーが報告されるため、「try...catch」コード ブロック内に配置する必要があります。

このパラメータが「/foo/index.html」などの単なる Web サイトのパスである場合、ベース URL を 2 番目のパラメータとして指定する必要があります。

const url1 = 新しい URL('page2.html', 'http://example.com/page1.html');
url1.href // "http://example.com/page2.html"

const url2 = 新しい URL('..', 'http://example.com/a/b.html')
url2.href // "http://example.com/"

この書き方は、既存の URL に基づいて新しい URL を構築する場合に非常に便利です。

URL() への引数には、別の URL インスタンスを指定することもできます。このとき、URL() はインスタンスの href 属性を実パラメータとして自動的に読み込みます。

##インスタンスのプロパティ

URL インスタンス オブジェクトを取得すると、そのさまざまなプロパティから URL のさまざまなコンポーネントを簡単に取得できます。

  • href: 完全な URL
  • プロトコル: アクセスプロトコル。末尾にコロン「:」が付きます。
  • 検索: 疑問符「?」で始まるクエリ文字列。
  • ハッシュ: # で始まるハッシュ文字列。
  • ユーザー名: 認証が必要な URL のユーザー名。
  • パスワード: 認証が必要なURLのパスワード。
  • host: プロトコルなし、ポートありのホスト名。
  • ホスト名: プロトコルとポートを含まないホスト名。
  • ポート: ポート。
  • 発信元: プロトコル、ドメイン名、ポートを含む。
  • パス名: ルート パス / で始まり、クエリ文字列を含まないサーバー パス。
  • searchParams: URLSearchParams インスタンスを指します。これは、クエリ文字列の構築と操作に便利です。

以下に使用例を示します。

const url = 新しい URL('http://user:pass@example.com:8080/resource/path?q=1#hash');

url.href // http://user:pass@example.com:8080/resource/path?q=1#hash
url.protocol // http:
url.username // ユーザー
url.password // パス
url.host // example.com:8080
url.hostname // example.com
URL.ポート // 8080
URL.パス名 // /リソース/パス
url.search // ?q=1
url.hash // #ハッシュ
url.origin // http://example.com:8080

これらのプロパティのうち、「origin」プロパティのみが読み取り専用で、他のプロパティは書き込み可能であり、すぐに有効になります。

const url = 新しい URL('http://example.com/index.html#part1');

url.pathname = 'index2.html';
url.href // "http://example.com/index2.html#part1"

url.hash = '#part2';
url.href // "http://example.com/index2.html#part2"

上記の例では、URL インスタンスの「pathname」属性と「hash」属性への変更は、リアルタイムで URL インスタンスに反映されます。

以下は searchParams 属性の使用例です。その特定の属性とメソッドの概要については、「URLSearchParams」の章を参照してください。

const url = 新しい URL('http://example.com/path?a=1&b=2');

url.searchParams.get('a') // 1
url.searchParams.get('b') // 2

for (const [k, v] of url.searchParams) {
  console.log(k, v);
}
// 1
//b2

静的メソッド

URL.createObjectURL()

URL.createObjectURL() メソッドは、パラメータとして URL を必要とするメソッドで使用するファイル データの一時 URL (URL 文字列) を生成するために使用されます。メソッドの引数は Blob 型 (つまり、ファイルを表すバイナリ データ) である必要があります。

// HTMLコードは以下の通り
// <div id="表示"/>
// <入力
// type="ファイル"
// id="ファイルエレム"
// 複数
// accept="画像/*"
// onchange="handleFiles(this.files)"
// >
const div = document.getElementById('display');

関数ハンドルファイル(ファイル) {
  for (let i = 0; i < files.length; i++) {
    let img = document.createElement('img');
    img.src = window.URL.createObjectURL(files[i]);
    div.appendChild(img);
  }
}

上記の例では、URL.createObjectURL() メソッドを使用して、アップロードされたファイルの一時 URL を <img> 要素の画像ソースとして生成します。

このメソッドで生成されるURLは以下のようになります。

BLOB:http://localhost/c745ef73-ece9-46da-8f66-ebes574789b1

URL.createObjectURL() メソッドが使用されるたびに、URL インスタンスがメモリ内に生成されることに注意してください。このメソッドによって生成された一時 URL が不要になった場合は、メモリを節約するために、URL.revokeObjectURL() メソッドを使用してこのインスタンスを解放できます。

以下は、ワーカー プロセスを生成する例です。

<script id='code' type='text/plain'>
  postMessage('foo');
</script>
<スクリプト>
  var code = document.getElementById('code').textContent;
  var blob = new Blob([コード], { type: 'application/javascript' });
  var url = URL.createObjectURL(blob);
  var ワーカー = 新しいワーカー(url);
  URL.revokeObjectURL(url);

  worker.onmessage = function(e) {
    console.log('ワーカーが返しました: ', e.data);
  };
</script>

URL.revokeObjectURL()

URL.revokeObjectURL() メソッドは、URL.createObjectURL() によって生成された一時 URL を解放するために使用されます。そのパラメータは、「URL.createObjectURL()」メソッドによって返される URL 文字列です。

以下では、前のセクションの例に URL.revokeObjectURL() を追加します。

var div = document.getElementById('display');

関数ハンドルファイル(ファイル) {
  for (var i = 0; i < files.length; i++) {
    var img = document.createElement('img');
    img.src = window.URL.createObjectURL(files[i]);
    div.appendChild(img);
    img.onload = function() {
      window.URL.revokeObjectURL(this.src);
    }
  }
}

上記のコードでは、画像が正常にロードされると、ローカル ファイル用に生成された一時 URL は役に立たないため、リソースは img.onload コールバック関数の URL.revokeObjectURL() メソッドを通じて解放できます。

URL.canParse()

URL() コンストラクターが不正な URL を解析するとエラーがスローされ、これは try...catch コード ブロックで処理する必要がありますが、これは結局あまり便利ではありません。したがって、URL オブジェクトには、現在の文字列が有効な URL かどうかを示すブール値を返す URL.canParse() メソッドが導入されています。

URL.canParse(url)
URL.canParse(url, ベース)

URL.canParse() は 2 つのパラメータを受け入れることができます。

  • url: URL を表す文字列またはオブジェクト (<a> 要素の DOM オブジェクトなど)。
  • base: URL のベース位置を示す文字列または URL インスタンス オブジェクト。最初のパラメータ url が相対 URL の場合、このパラメータは完全な URL を計算して判断するために使用されます。
URL.canParse("https://developer.mozilla.org/") // true
URL.canParse("/en-US/docs") // false
URL.canParse("/en-US/docs", "https://developer.mozilla.org/") // true

上記の例では、最初のパラメータが相対 URL の場合、2 番目のパラメータが必要です。そうでない場合は、「false」が返されます。

次の例では、URL インスタンス オブジェクトを 2 番目のパラメーターとして受け取ります。

letbaseUrl = 新しいURL("https://developer.mozilla.org/");
URL = "/en-US/docs";

URL.canParse(url,baseUrl) // true

このメソッドは内部で URL() コンストラクターと同じ解析アルゴリズムを使用するため、URL() コンストラクターで置き換えることができます。

関数 isUrlValid(string) {
  試す {
    新しい URL(文字列);
    true を返します。
  } キャッチ (エラー) {
    false を返します。
  }
}

上記の例では、URL.canParse() の代替実装である isUrlValid() が指定されています。

URL.parse()

「URL.parse()」は新しく追加されたメソッドで、Chromium 126 および Firefox 126 でサポートされています。

その主な目的は、不正な URL を解析するときに URL() コンストラクターがエラーをスローするという問題を変更することです。この新しいメソッドはエラーをスローせず、パラメータが有効な URL の場合は URL インスタンス オブジェクトを返し、それ以外の場合は「null」を返します。

const urlstring = "これは URL ではありません";

const not_a_url = URL.parse(urlstring); // null

上記の例では、URL.parse() のパラメータが有効な URL ではないため、null が返されます。

##インスタンスメソッド

toString()

URL インスタンス オブジェクトの toString() は、URL 全体である URL.href プロパティを返します。


作者: wangdoc

アドレス: https://wangdoc.com/

ライセンス: クリエイティブ・コモンズ 3.0