紀錄工作經驗、相關知識,解決技術相關問題。

Javascript

[JS] Javascript 取得目前 URL 與相關參數(總整理):window.location 9 大屬性速查表

[JS] Javascript 取得目前 URL 與相關參數(總整理):window.location 9 大屬性速查表 特色圖片

現今網站製作隨著前後端分離架構普及,JavaScript 在處理頁面路由與網址操作上已是必備工具。當我們需要在前端透過 window.location 取得目前 URL 與相關參數時,清楚掌握每個屬性的回傳格式能避免許多字串裁切錯誤。本篇完整圖解並整理製作網頁最常使用的 9 個 JavaScript window.location 取得網址與參數語法。

⚡ 快速跳轉(依實務情境選擇):

window.location 9 大屬性結構拆解圖與速查表

JavaScript 中所有與「當前頁面網址(URL)」相關的資訊,都封裝在 window.location(可簡寫為 location)物件中。

JavaScript window.location 網址結構 9 大屬性拆解圖

假設目前瀏覽器網址為:
https://www.website.com:8080/type/page.html?id=111&t=9#template

以下為 9 大屬性的回傳值速查表(點選屬性名稱可前往該屬性的進階實作專篇):

屬性名稱用途說明實際輸出結果
location.href取得完整 URL 字串"https://www.website.com:8080/type/page.html?id=111&t=9#template"
location.protocol取得通訊協定(含結尾冒號 :)"https:"
location.host取得主機網域名稱+非預設連接埠號"www.website.com:8080"
location.hostname取得純網域名稱(不含連接埠號)"www.website.com"
location.origin取得完整來源(協定+網域+非預設埠)"https://www.website.com:8080"
location.port取得連接埠號字串(預設埠回傳空字串)"8080"
location.pathname取得頁面路徑(以 / 開頭)"/type/page.html"
location.search取得問號 ? 開頭的 GET 查詢參數字串"?id=111&t=9"
location.hash取得井字號 # 開頭的頁面錨點名稱"#template"

JavaScript 取得 URL 各項參數實作範例

這邊我們先假定目前的測試網址是:

https://www.website.com:8080/type/page.html?id=111&t=9#template

接下來,我們依序使用 JavaScript 取得上方 URL 的 9 個區段資訊。

1. JS 取得完整網址:location.href

想取得目前當前完整的網址字串,或是將頁面導向新網址,可使用 location.href:

let s = location.href;
console.log(s);
// 輸出: "https://www.website.com:8080/type/page.html?id=111&t=9#template"

檢視 location.href 瀏覽器相容性

2. JS 取得當前通訊協定:location.protocol

有時候我們會需要用 JS 取得網站當前傳輸協定,用來判斷網頁目前是 http: 還是加密的 https:,這時可以使用 location.protocol(注意回傳字串結尾包含冒號 :):

let s = location.protocol;
console.log(s);
// 輸出: "https:"

檢視 location.protocol 瀏覽器相容性

3. JS 取得主機網域與連接埠:location.host

取得目前網域名稱時,location 中有兩個屬性可以使用,分別為 location.host 與 location.hostname。當網址帶有非預設連接埠(如 :8080 或本地開發 :3000)時,location.host 會一併回傳 "網域名稱:連接埠號"(若為標準預設埠 HTTP 80 / HTTPS 443 則會自動省略埠號):

let s = location.host;
console.log(s);
// 輸出: "www.website.com:8080"

檢視 location.host 瀏覽器相容性

4. JS 取得純網域名稱:location.hostname

若只需要取得純淨的網域名稱(永遠不包含 :8080 等連接埠號,最適合用來判斷 localhost 或拆解子網域),請使用 location.hostname:

let s = location.hostname;
console.log(s);
// 輸出: "www.website.com"

檢視 location.hostname 瀏覽器相容性

5. JS 取得包含協定(http/https)的來源網域:location.origin

如果你想取得包含前方通訊協定與主機位址的根網址(Origin),除了手動串接 location.protocol + '//' + location.host 外,更簡潔的做法是直接使用唯讀屬性 location.origin:

let s = location.origin;
console.log(s);
// 輸出: "https://www.website.com:8080"

檢視 location.origin 瀏覽器相容性

6. JS 取得目前連接埠號:location.port

取得當前網址明確指定的連接埠號,可使用 location.port(注意:若網址未標示連接埠,或使用 HTTP 預設 80 埠、HTTPS 預設 443 埠時,會回傳空字串 ""):

let s = location.port;
console.log(s);
// 輸出: "8080"

檢視 location.port 瀏覽器相容性

7. JS 取得目前頁面路徑:location.pathname

JS 要取得目前網域名稱後方、問號 ? 之前的頁面路徑,請使用 location.pathname:

let s = location.pathname;
console.log(s);
// 輸出: "/type/page.html"

檢視 location.pathname 瀏覽器相容性

這是製作網頁最常用到的屬性之一。透過 location.search 可取得問號 ? 開頭的所有 GET 參數字串,並可搭配原生 URLSearchParams 直接提取特定參數值:

let s = location.search;
console.log(s);
// 輸出: "?id=111&t=9"

// 進階:搭配原生 URLSearchParams 直接取得特定參數值
const params = new URLSearchParams(location.search);
console.log(params.get('id')); // 輸出: "111"
console.log(params.get('t'));  // 輸出: "9"

檢視 location.search 瀏覽器相容性

9. JS 取得網址錨點名稱:location.hash

網頁常使用 # 錨點來快速移動到指定的 id 區塊。當 JS 需要取得目前的錨點名稱時,可使用 location.hash:

let s = location.hash;
console.log(s);
// 輸出: "#template"

// 若只需不含 # 號的純錨點名稱:
console.log(location.hash.slice(1)); // 輸出: "template"

檢視 location.hash 瀏覽器相容性

延伸技巧:頁面跳轉 assign()、replace() 與 reload() 差異

除了讀取上述 9 大屬性外,window.location 也提供 3 個控制頁面跳轉與重新整理的標準方法:

方法或操作語法是否保留瀏覽器上一頁紀錄 (History)典型適用場景
location.href = url 或 location.assign(url)✅ 保留(按上一頁可返回原頁面)一般連結跳轉、商品列表進入詳情頁
location.replace(url)❌ 不保留(直接覆蓋當前歷史紀錄)登入成功後導頁、權限不足踢回首頁(防按上一頁死迴圈)
location.reload()維持當前頁面紀錄重新載入當前頁面以取得最新伺服器資料

若你想在不重新整理頁面的情況下解析「任意網址字串」或動態更新網址參數,請參考另一篇專文:如何透過 Javascript 取得網址與 URL 相關參數:location 物件與 new URL() 解析教學。

檢視 location 各語法於瀏覽器相容性

寫程式最怕遇到語法在特定瀏覽器中不相容,以下一併整理 location 中各項屬性在各個瀏覽器中的相容性查核表:

發表迴響