URL は、Uniform Resource Locator として知られ、インターネット上のリソースを検索するために使用できる文字列を指します。一般的なコンテキストでは、ネットワーク アドレスまたはリンクとも呼ばれます.特定の Web ページにアクセスする必要がある場合、対応する URL 文字列を入力する必要があり、この URL が URL です。
URL リンクの場合、フロント エンドは、URL 文字列情報の作成または解析に使用できる URL オブジェクトを提供します。Nodejs には、URL オブジェクトをサポートし、ブラウザー環境と互換性のある、URL を処理するための対応するモジュールもあります。
URL オブジェクトを紹介する前に、URL URL 文字列について簡単に説明しましょう。
URL 文字列
URL 文字列は通常、さまざまな部分で構成されています. 以下は、ブラウザの入力ボックスに入力され、バイドゥで検索された単純な URL です中国
:
https://www.baidu.com/s?wd=中国
URLからわかるように、次の部分の内容:
- protocol: 使用されているネットワーク プロトコルを示します。
https
プロトコルは - ホスト: 要求された Web サーバーを示します。これは
www.baidu.com
バイドゥの - port: ポート番号を示します。ここには表示されていません。省略可能なデフォルトの
80
ポート番号です。 - pathname: ネットワーク リソース パスを示します。ここに
s
パスが - search: 提供されたネットワーク パラメータのクエリ文字列。
?wd=中国
これらのコンテンツは、一般的にページの場所を指定するために使用されるハッシュ アンカーに加えて、最も一般的なものです。
もちろん、絶対 URL や相対 URL など、さまざまな複雑な URL も見られますが、それらは本質的に基本構造から切り離すことはできません。
URL 文字列のエンコード
上記の百度検索中国
のURL は、ブラウザの入力ボックスに正常に表示できますが、文字列をコピーすると、次のように少し異なります。
https://www.baidu.com/s?wd=%E4%B8%AD%E5%9B%BD
これは、漢字が中国
エスケープされてエンコードされるためです。
URL文字列(url)には、使用できる文字に一定の規定があり、一般的にメタ文字と意味文字に分けられます。
- メタ文字: セミコロン (
;
)、カンマ (,)、スラッシュ (/)、疑問符 (?)、コロン (:
)、アットマーク (@)、アンパサンド (&)、等号 (=)、プラス記号 (+ )、記号($)、ポンド記号 (#); - セマンティック文字: az、AZ、0-9、ハイフン (-)、アンダースコア (_)、ドット (.)、感嘆符 (!)、チルダ (~)、アスタリスク (*)、単一引用符 (')、括弧(())。
上記の文字以外の文字を使用する場合は、他の文字をエンコードしてエスケープする必要があります. エンコード規則は、通常、システムのデフォルトのエンコードに基づいており、各文字の各バイトをパーセント記号と 2 つの大文字の 16 進数文字に変換します. . エスケープ エンコーディングに関する知識については、フロント エンドが理解する必要がある文字エンコーディングとエスケープ文字についてのブログ投稿。
したがって、URL 文字列に他の特殊文字がある場合、それらはエンコードおよびエスケープされ、後でURL
オブジェクト
上記のペアはすべて URL URL 文字列の紹介ですが、以下では JavaScript が提供する API と URL オブジェクトを正式に紹介します。
URL
JavaScript は、URL 文字列を解析、標準化、およびエンコードするための URL インターフェイス オブジェクトを提供します.これは、URL を簡単に解析または変更し、URL 文字列を処理するのに役立ちます. URL オブジェクトはWeb Worker
、Nodejs
および でも使用できます。
URL は、新しく作成された URL オブジェクトを返すコンストラクターを提供します: new URL(url [, base])
.
- URL:
URL URL 文字列を示します.
相対 URL の場合, base は base URL として使用されます
. 絶対 URL の場合, base は自動的に無視されます. - base:
ベースに使用する URL 文字列。デフォルトは空です。
上記の URL に対して、URL オブジェクトを作成できます。
const myUrl = new URL('https://www.baidu.com/s?wd=中国')
URL インスタンスをコンソールに表示するmyUrl
と、オブジェクトのプロパティが前述の URL 文字列構造と一致していることがわかります。URL オブジェクト自体が URL を解析できるため、さまざまな URL 文字列を解析するのに非常に便利です。
URL インスタンスのプロパティとメソッド
次に、これらの URL オブジェクトのインスタンス プロパティとメソッドを簡単に紹介します。
hash: フラグメント識別子
#
を含む
host: ドメイン名 (ホスト名 | IP アドレスなど)、ポート (存在する場合) を含む 文字列
hostname: ドメイン名 (ホスト名 | IP アドレスなど) 文字列、 port
href: 完全な URL 文字列
origin: プロトコル、ドメイン名、およびポート文字列を含む読み取り専用
password: ドメイン名の前に指定されたパスワード。現在は一般的にまれです。
pathname:/
記号(おおよそ
port: ポート番号 string
protocol: ネットワーク プロトコル文字列
search:?
シンボル
searchParams: 読み取り専用、URLSearchParams
オブジェクト、パラメータ文字列へのアクセスに使用
username:ドメイン名、現在は一般的にまれです
toString() : 完全な URL 文字列、URL.href と同じ
toJSON() : 完全な URL 文字列URL.href
、toString()
基本的には および と同じ
インスタンス メソッドは主に URL の変更と解析に使用されます。これは処理に便利です。URL オブジェクトは作成用の静的メソッドも提供しますObject URL
。
URL.createObjectURL()
Object URL
とも呼ばれBlob URL
、ブラウザ内で生成されたURL
から へのBlob
、URL を生成して現在のページにロードできます。
ただしURL.createObjectURL()
、指定されたオブジェクト (通常はFile
またはBlob
Web サイトの URL を作成すると、この URL は現在のウィンドウ (ドキュメント) にバインドされ、現在のウィンドウが閉じられると無効になります。
構文:objectURL = URL.createObjectURL(object);
パラメータは次の値を取ることができます: File
, Blob
object. な
const url = URL.createObjectURL(file)
ファイルの場合、次のような URL が生成されます: をblob:http://localhost:8080/29c75da5-9b55-4b9f-2383-1a643c9b5a1c
読み込んで、現在のウィンドウ ページに表示できます。
URL.createObjectURL()
を呼び出すとObject URL
、毎回新しいオブジェクトが作成されます. 現在のウィンドウ ページが閉じられると、ブラウザは自動的にオブジェクトを解放しますが、積極的にオブジェクトを解放することもできます. URL オブジェクトの別の静的メソッドを呼び出す必要があります: URL.revokeObjectURL()
.
URL.revokeObjectURL(url)
The above statement can release the current object. このコンテンツの知識については、前のブログ投稿を参照して、フロントエンド バイナリの詳細
を説明して: Blob, File, FileReader, ArrayBuffer, TypeArray, DataView .
URLSearchParams
URLSearchParams
このオブジェクトは、url URL 情報のクエリ文字列を処理するために特別に使用され、通常、URL 文字列の内容は?
疑問符(疑問符は含まれません)。
URL オブジェクトには、オブジェクトsearchParams
を返す、クエリ文字列が解析され、等号で区切られてkey-value
、キーと値のペアの対応するデータ形式が生成されます。
次のように:
const myUrl = new URL('https://www.baidu.com/s?wd=中国')
// myUrl.searchParams 返回的是包含 `wd=中国` 内容的对象
myUrl.searchParams.get('wd') // 输出:'中国'
URLSearchParams
オブジェクトは、コンストラクターを使用してインスタンスをカスタマイズすることもできます。
const urlSearchParams = new URLSearchParams('wd=中国&city=上海')
urlSearchParams.get('city') // 输出:'上海'
URLSearchParams
オブジェクト インスタンスは Iterator オブジェクトであり、JavaScript のトラバーサル構文を使用して各項目の [キー、値] を出力できます。
for (const usp of urlSearchParams) {
console.log(usp)
}
// ['wd', '中国']
// ['city', '上海']
URLSearchParams インスタンス メソッド
URLSearchParams
このオブジェクトは、クエリ文字列データを読み取ったり変更したりするための複数のインスタンス メソッドを提供し、データを走査するための 3 つのメソッドも提供します。
append(): 新しいキー値パラメーターを追加する
delete(key): 対応するキー値を削除する
get(key): 最初の値を返す
getAll(key): すべての値の配列を返す
has(key): 存在するかどうかa キー値
set(key, value): 指定されたキーと値のペア パラメータを設定する
sort(): キー名でソートする
toString(): クエリ文字列を返す
keys(): すべてのキー名を含むイテレータ オブジェクトを返す
values(): 戻り値すべての値を含む iterator オブジェクト
entries(): すべてのキーと値を含む iterator オブジェクトを返します
const urlSearchParams = new URLSearchParams('wd=中国&city=上海')
urlSearchParams.append('city', '北京')
urlSearchParams.getAll('city') // ['上海', '北京']
for (const key of urlSearchParams.keys()) {
console.log(key)
}
// 输出:wd city city
上記のコードは、いくつかのメソッドの使用例です. これらのメソッドを通じて、クエリ パラメータを読み取ったり、現在の URL のクエリ パラメータを変更したりできます. さらに、POST 非同期データとしてサーバーに送信することもできます.
POST リクエストのデータ パラメータとして
const url = 'https://www.test.com/api/update'
const params = new URLSearchParams()
params.append('wd', '中国')
const xhr = new XMLHttpRequest()
xhr.open('POST', url)
xhr.send(params)
POST リクエストは AJAX 非同期リクエストを介して送信され、URLSearchParams
インスタンス。
上の図からわかるように、設定されたURLSearchParams
オブジェクトパラメータはForm Data
、POST リクエストのデータとして使用されます。
NodejsもURLとURLSearchParamsクラスのオブジェクトを提供しており、定義と属性のメソッドは基本的に同じであり、使用方法も同じで、直接使用できるため、繰り返し学習のコストを削減できます。
Web の URL 関連の属性
ブラウザ環境では、URL に関連する Web ウィンドウで定義された複数の属性があります. たとえば、document
オブジェクトに複数の属性があり、そのすべてが URL に関連しています. 以下で詳しく見てみましょう.
document.URL と document.documentURI
document.URL
プロパティは、現在の Web ページ ドキュメントの url URL 文字列を直接返します。
URL オブジェクトと同じではなく、文字列を返すだけであることに注意してください。document.documentURI
この属性は、現在のドキュメントを直接返す url URL 文字列でもあります。
これらは Web (HTML) ドキュメントで同等であり、どちらも現在の URL の文字列を返します。
document.documentURI === document.URL
// true
違いは、documentURI
この属性はすべてのドキュメントに適用されるのに対し、URL
この属性は HTML ドキュメントでしか使用できないことです。
document.domain と document.referrer
-
document.domain
プロパティは、現在の Web ドキュメントのドメイン名を返します。
ページhttps://www.baidu.com/s?wd=中国
の、document.domain
値は ですwww.baidu.com
。 -
document.referrer
この属性は、Web ページのジャンプ リンクを対象として、現在のページにジャンプする前のページの URL 文字列を返します。リンク ジャンプがなく、ブラウザの入力ボックスに URL を直接入力した場合、値は空の文字列になります。
位置
location
これは、ウィンドウ オブジェクトとドキュメント オブジェクトの両方のプロパティです。直接呼び出すことができ、現在のドキュメントの URL 情報を記述するLocation
オブジェクト。これには、より多くのコンテンツが含まれています。
window.location
document.location
// 返回Location对象
位置オブジェクト
Location
オブジェクトのプロパティは、上記で紹介した URL オブジェクトと同じです。上記のセクションを参照してくださいURL实例属性和方法
。
Location オブジェクトには、現在のページ URL に対してさまざまな操作を実行できる固有のメソッドがあります。
- location.assign(url): 別の URL にジャンプ
- location.reload(boolean): 現在の URL を再読み込みします。パラメーターが true の場合はサーバーから読み込まれます。パラメーターが false の場合はキャッシュから読み込まれます。
- location.replace(url): 現在のページをパラメーターで指定された URL に置き換えます。履歴セッションには記録されず、ブラウザーの戻るボタン機能は役に立ちません。
- location.toString(): 現在の Web ページを返します
location.href
。
場所に値を割り当てる
location 属性に値を直接割り当てることもできます. URL を指定すると、その URL にジャンプします.これは、location.href
値を割り当てるの:
location = 'https://baidu.com'
location.href = 'https://baidu.com'
// 也可以使用相对URL
location = 'other.html'
// 指定锚点,浏览器会自动滚动到页面锚点处
location = '#footer'