【前端開發】如何使用 JavaScript 進行頁面的轉址?

閱讀時間約 3 分鐘

在前端開發中,很常會有需要轉址的需求,且處理的手法滿因人而異的,所以今天就想要來整理一些常見的 JavaScript 頁面轉址方式,以及各自的差異。

以下作法建立在瀏覽器上全域物件 Window 底下 Location 的物件,這個物件提供了有關當前網頁的相關資訊,例如 URL、主機、路徑和查詢參數等,由於這篇文章的主旨並不是針對 Location 物件做討論,所以不會針對其底下的屬性一一介紹。

接著就讓我們來看看在開發實務上會有哪些常用的轉址方式吧!

window.location.href

window.location.href 是最常見的轉址方式, hreflocation 底下的一個屬性,我們會透過賦值給這個屬性來做到轉址且將這個變化加入到歷史紀錄中,這樣使用者在切換頁面時,就可以透過上下一步找到此頁面:

window.location.href = 'https://www.ccc.ooo';

window.location.assign()

如果覺得 window.location.href 長得醜醜的, window.location.assign() 方法一樣可以透過帶入路徑參數來做到轉址:

window.location.assign('https://www.ccc.ooo');

這個方法與 window.location.href 最大的差異是,今天萬一導向的是不同網域的頁面且觸發的該網域的資安防護, window.location.assign() 會拋出 SECURITY_ERROR 的錯誤訊息,做到更好的錯誤管理(雖然我目前還沒有確切遇到過)。

window.location.replace()

在有些情境下,使用者可能不小心進入邊緣情境,例如:根本沒有這個路徑。

此時我們可能會希望幫使用者做「重新導向」,一旦進入到指定頁面,我們把它轉向至首頁或是其他用來防呆用的頁面,且重新導向的過程中,該路徑不會被加入歷史紀錄,使用者就不會透過點擊上下一頁按鈕,而再次進入到錯誤的頁面中:

// 假設使用者不小心進入 <https://www.ccc.ooo/dsfsf>
// 我們使用 window.location.replace() 將頁面重新導向至 <https://www.ccc.ooo>
// <https://www.ccc.ooo/dsfsf> 將不會出現在歷史紀錄中
window.location.repalce('https://www.ccc.ooo');

window.location.assign() 相同的是:今天萬一導向的是不同網域的頁面且觸發的該網域的資安防護, window.location.replace() 會拋出 SECURITY_ERROR 的錯誤訊息。

小結

同樣都是透過 Location 物件來進行轉址,但能得到的結果與使用者體驗大不同,如果只是普通的靜態頁面也許用上述的這幾種方式都不會差去哪,但如果有一些 HTTP Request 、Token、流程有時效性或是有順序性,不能讓、或是允許使用者回溯的狀況,都可以透過上方的這些轉址方式做到細節的流程控制。

希望這篇文章可以幫助到跟我一樣,一開始不太清楚轉址流程的前端新手,我是 Vivian,我們下次見。

參考資料:

為了追求可以窩在座位上、可以心無旁騖思考問題、座位可以亂七八糟沒關係、不需要到處哈腰點頭跑客戶,不用腳踩十公分、連妝都可以不用化的職場人生,文組少女毅然決然踏上RD的養成日常。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Functional Programming 中文譯作函式程式設計,或是功能性程式設計,常簡稱為:FP,是一種透過使用純函式(Pure Funciton)進行軟體開發,且避免副作用的程式設計典範,比起宣告式的流程控制,在 FP 採用主要以表達式的方式撰寫程式碼。
Hoisting 可以說是 ES6 問世之後,去面試還是會爾偶被問到的面試考題,雖然 Hoisting 離 Modern JavaScript 的技術有點距離,實作上幾乎不太會用到,但透過了解 Hoisting 的概念,可以對這門語言有更深的了解與掌握度。
對於剛接觸前端開發不久的人來說,可能會對var、let 與 const 的差異略懂略懂,但又說不太出三者實際哪裡不一樣。
在一開始學習前端開發的時候,一直遇到講師在課程內容中提到 ES5、ES6 等關鍵字,當初的我,單純認為 ES5、ES6 是講述 JavaScript 的版本,所以在使用上就沒有想太多,反正就是 JavaScript 1.0 、2.0 的感覺吧?
在初學程式的時候,我曾經看室友開發專案到一半時,突然坐在那發呆,於是我好奇一問,室友說:「我在等程式編譯完成啊。」 還記得當初還是程式小菜雞的我,懞懂無知的說:「編譯?哈哈哈,我們 JavaScript 都不需要編譯耶,可以直接跑在瀏覽器上。」 室友一臉莫名其妙地回我:「噢,是嗎⋯⋯」
前陣子有讀者來信詢問我:「嗨!Vivian,我想要請問妳都是在哪裡學程式的呢?是實體課程嗎?」
Functional Programming 中文譯作函式程式設計,或是功能性程式設計,常簡稱為:FP,是一種透過使用純函式(Pure Funciton)進行軟體開發,且避免副作用的程式設計典範,比起宣告式的流程控制,在 FP 採用主要以表達式的方式撰寫程式碼。
Hoisting 可以說是 ES6 問世之後,去面試還是會爾偶被問到的面試考題,雖然 Hoisting 離 Modern JavaScript 的技術有點距離,實作上幾乎不太會用到,但透過了解 Hoisting 的概念,可以對這門語言有更深的了解與掌握度。
對於剛接觸前端開發不久的人來說,可能會對var、let 與 const 的差異略懂略懂,但又說不太出三者實際哪裡不一樣。
在一開始學習前端開發的時候,一直遇到講師在課程內容中提到 ES5、ES6 等關鍵字,當初的我,單純認為 ES5、ES6 是講述 JavaScript 的版本,所以在使用上就沒有想太多,反正就是 JavaScript 1.0 、2.0 的感覺吧?
在初學程式的時候,我曾經看室友開發專案到一半時,突然坐在那發呆,於是我好奇一問,室友說:「我在等程式編譯完成啊。」 還記得當初還是程式小菜雞的我,懞懂無知的說:「編譯?哈哈哈,我們 JavaScript 都不需要編譯耶,可以直接跑在瀏覽器上。」 室友一臉莫名其妙地回我:「噢,是嗎⋯⋯」
前陣子有讀者來信詢問我:「嗨!Vivian,我想要請問妳都是在哪裡學程式的呢?是實體課程嗎?」
你可能也想看
Google News 追蹤
Thumbnail
經常在社群上看到有人詢問為什麼我的「網站名稱」是網址?要如何修改出現在搜尋結果頁上的網站名稱?因此,本篇文章將解釋什麼是網站名稱、如何撰寫及新增網站名稱。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
※ Javascript和HTML的關係 當我們輸入新的網址或按下重新整理時,從解析檔案到畫面顯示出來,瀏覽器會進行以下流程: 解析 HTML / CSS 檔案,建立物件模型: HTML → DOM (Document Object Model)。 CSS → CSSOM (CSS Obje
Thumbnail
本篇文章介紹了路徑的概念和兩種不同的路徑運用。這些知識對於網頁開發非常重要,能夠幫助網站開發者更好地管理資源文件的位置。文章通過實際例子和相對路徑的範例來解釋這些概念。希望通過這篇文章,讀者能夠清楚地瞭解路徑的概念,並在日後的開發中能夠靈活運用。
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
之前分享過【網路請求帶參數的方式】,開發者可以透過 URL 代入參數,來向伺服器請求特定的資源,我們當然也可以擷取 URL 的內容,來做為後續開發的判斷條件,這篇就來記錄一下,網址(URL) 和域名(Domain) 是什麼,以及如何取得網址的參數吧! 我們常說的網址連結 URL 完整名稱是 U
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
發送表單用get跟post看起來好像都無所謂,然而事實並非如此,使用GET的風險如下: 安全性問題 機密資訊為何不宜用GET,是因為由GET方法提交的表單會將欄位的key,value顯示於URL上,想像一下如果小明借用你的電腦,查看你的網頁歷史紀錄時就可以看到你的帳密了,多可怕! 再來就是如果
Thumbnail
有時候,最簡單的事情可以做很多事! 如果你點擊活動廣告,你會注意到網址尾端會有一些額外的“代碼”。 類似:“?utm_source=XXXXX” 「XXXXX」是對放置連結的位置的描述,以便活動商追蹤來源。 但這僅用於追蹤數據。 下次當你要分享其他人的網站或內容時,使用相同的“程式碼”看看
Thumbnail
經常在社群上看到有人詢問為什麼我的「網站名稱」是網址?要如何修改出現在搜尋結果頁上的網站名稱?因此,本篇文章將解釋什麼是網站名稱、如何撰寫及新增網站名稱。
Thumbnail
本章節旨在介紹JavaScript中的物件導向編程。內容包括類別(Class)的定義和使用,建構子的作用,以及公開,私有,受保護(Protected)等不同訪問修飾符的概念。此外,還涵蓋了繼承、多型、封裝、介面、抽象類別、靜態類別、列舉、委派、Lambda表達式、泛型、反射等物件導向的主要觀念。
Thumbnail
本章目的是為讀者提供有關如何設置JavaScript開發環境的知識,包括在瀏覽器、Node.js和各種編輯器和IDE中編寫和運行JavaScript的信息。此外,本章還介紹了如何架設本地開發伺服器以模擬實際的網頁環境。這些知識對於希望開發前端應用或後端服務的JavaScript開發者來說都是必要的。
※ Javascript和HTML的關係 當我們輸入新的網址或按下重新整理時,從解析檔案到畫面顯示出來,瀏覽器會進行以下流程: 解析 HTML / CSS 檔案,建立物件模型: HTML → DOM (Document Object Model)。 CSS → CSSOM (CSS Obje
Thumbnail
本篇文章介紹了路徑的概念和兩種不同的路徑運用。這些知識對於網頁開發非常重要,能夠幫助網站開發者更好地管理資源文件的位置。文章通過實際例子和相對路徑的範例來解釋這些概念。希望通過這篇文章,讀者能夠清楚地瞭解路徑的概念,並在日後的開發中能夠靈活運用。
Thumbnail
在開發前後端分離架構時,使用兩個不同網域所遇到跨域請求問題。特別是在POST請求時行為差異大,揭示了「簡單請求」與「預檢請求」的關鍵差異。簡單請求不需預檢,但application/json會觸發預檢請求,需透過特定設定解決。分享這篇文章希望幫助開發者有效處理跨域問題。
Thumbnail
之前分享過【網路請求帶參數的方式】,開發者可以透過 URL 代入參數,來向伺服器請求特定的資源,我們當然也可以擷取 URL 的內容,來做為後續開發的判斷條件,這篇就來記錄一下,網址(URL) 和域名(Domain) 是什麼,以及如何取得網址的參數吧! 我們常說的網址連結 URL 完整名稱是 U
描述我所瞭解的 Web 攻擊技術 何謂網路攻擊? 駭客透過各種系統漏洞或惡意程式,搭配許多技術和工具進行攻擊。目標是要在企業或個人電腦網路中損害、取得控制權或存取重要的文件和系統。 例如: XSS(Cross-Site Scripting,跨站腳本攻擊/跨網站指令碼):指網路罪犯透過存在安全
發送表單用get跟post看起來好像都無所謂,然而事實並非如此,使用GET的風險如下: 安全性問題 機密資訊為何不宜用GET,是因為由GET方法提交的表單會將欄位的key,value顯示於URL上,想像一下如果小明借用你的電腦,查看你的網頁歷史紀錄時就可以看到你的帳密了,多可怕! 再來就是如果
Thumbnail
有時候,最簡單的事情可以做很多事! 如果你點擊活動廣告,你會注意到網址尾端會有一些額外的“代碼”。 類似:“?utm_source=XXXXX” 「XXXXX」是對放置連結的位置的描述,以便活動商追蹤來源。 但這僅用於追蹤數據。 下次當你要分享其他人的網站或內容時,使用相同的“程式碼”看看