詳解JavaScript操作URL的方法(單頁應用常用)
詳解JavaScript操作URL的方法(單頁應用常用)
#JavaScript擁有許多可以操作瀏覽器歷史記錄的方法,不管是普通頁面跳轉,還是單頁應用哈希值變化,我們都會經常與這些方法打交道,尤其在單頁應用中這些方法幾乎是頁面路由的核心方法。本文將詳細討論這些方法。
1.document.location
location是最有用的BOM物件之一,它提供了與目前視窗中載入的文件有關的信息,也提供了一些導航功能。事實上,location物件既是window物件的屬性,也是document物件的屬性。換句話說,window.location和document.location是同一個物件。這裡推薦大家使用document.location的寫法,以適應非瀏覽器文件環境。
除去為a標籤設定的href屬性,大家最常用的跳轉方式一定就是:window.location.href=”xxx”;實際上,上面這句程式碼真正執行的是location.assign方法。簡而言之,下面三中URL跳轉的寫法完全等同,都會立即打開新的URL並在瀏覽器的歷史記錄中產生一條記錄:
document.location.assign("xxx");document.location="xxx";document.location.href="xxx";
需要注意的是,如果透過這種方式跳轉的URL與目前URL完全相同,則頁面會刷新,但是瀏覽器歷史記錄不會新增。
2.location.replace
功能幾乎與location.href=”xxx”;
完全相同,只有一個區別,location.replace會在瀏覽器的歷史記錄中產生一筆記錄,並取代前一筆記錄。舉個例子,當我們開啟「a.html」頁面,頁面內有以下兩行程式碼:
document.location.href="c.html";document.location.replace("b.html");
瀏覽器先透過location.href
的方式跳到c.html ,接著又使用location.replace
跳到b.html。此時點選瀏覽器的後退按鈕,瀏覽器會直接回傳a.html,因為c.html這條歷史記錄被replace覆蓋了。
3.window.onhashchange
我們可以透過以下程式碼形式來監聽瀏覽器URL的雜湊值變化:
window.addEventListener("hashchange",function(){ //do something },false);//以下代码都会触发hashchange事件 document.location.hash="#a=1";document.location.href="b.html#b=1";document.location.replace("c.html#c=1");
當我們透過改寫location的方式引起瀏覽當器URL雜湊值變化時,hashchange事件就會觸發。如果URL重寫導致了頁面刷新(例如改變了URL查詢參數,或直接跳向一個跨域位址),hashchange事件會直接被跳過。請注意,URL雜湊值變化不一定總是會觸發hashchange事件,下面要介紹的方法就是改動URL但不觸發hashchange。
4. history.pushState
pushState方法接收三個參數:記錄歷史狀態的物件(該物件會在popstate事件觸發時被傳入,有640K的大小限制);一個代表歷史記錄標題的字串;一個與目前URL同源的位址。典型的使用方式如下:
history.pushState({}, "", "b.html");
history.pushState()
方法會將URL設為同源URL值,在此之後發送的Ajax請求的Referrer頭部都會使用這個新的值,同時在瀏覽器歷史記錄中產生一筆新的歷史記錄。但是pushState方法不會刷新頁面,pushState引起的URL雜湊值變化也不會觸發hashchange事件。 pushState如果設定了一則與目前URL完全相同的位址,瀏覽器的歷史記錄中仍會新增一筆記錄。
5.history.replaceState
該方法與history.pushState
基本上相同,唯一的區別就是replaceState會像location.replace
一樣覆蓋先前歷史記錄。
關於history.pushState和history.replaceState的更多介紹:
http://www.php.cn/
6.window.onpopstate
我們可以透過如下程式碼形式來監聽瀏覽器的popstate事件:
window.addEventListener("popstate",function(event){ //do something},false);
與hashchange事件類似,popstate會在任何URL變化時觸發(hashchange只會在哈希值變化時觸發),並且history.pushState和history. replaceState也不會觸發popstate事件。只有在瀏覽器後退、前進、重寫雜湊值的情況下才會觸發popstate事件。如果URL重寫導致了頁面刷新(例如改變了URL查詢參數,或直接跳向一個跨域位址),popstate事件會直接被跳過。
這裡請注意一下程式碼中傳給事件函數的參數“event”,event參數中包含state對象,這個state物件就是在呼叫history.pushState和history.replaceState方法是傳入的第一個狀態參數,我們可以透過這種狀態傳遞方式來對歷史記錄進行一定處理。
詳解JavaScript操作URL的方法(單頁應用常用)
JavaScript擁有許多可以操作瀏覽器歷史記錄的方法,不管是普通頁面跳轉,還是單頁應用哈希值變化,我們都會經常與這些方法打交道,尤其在單頁應用中這些方法幾乎是頁面路由的核心方法。本文將詳細討論這些方法。
1.document.location
location是最有用的BOM对象之一,它提供了与当前窗口中加载的文档有关的信息,还提供了一些导航功能。事实上,location对象既是window对象的属性,又是document对象的属性。换句话说,window.location和document.location是同一个对象。这里推荐大家使用document.location的写法,以适应非浏览器文档环境。
除去为a标签设置的href属性,大家最常用的跳转方式一定就是:window.location.href=”xxx”;实际上,上面这句代码真正执行的是location.assign方法。简而言之,下面三中URL跳转的写法完全等同,都会立即打开新的URL并在浏览器的历史记录中生成一条记录:
document.location.assign("xxx");document.location="xxx";document.location.href="xxx";
需要注意的是,如果通过这种方式跳转的URL与当前URL完全相同,则页面会刷新,但是浏览器历史记录不会新增。
2.location.replace
功能几乎与location.href=”xxx”;
完全相同,只有一个区别,location.replace会在浏览器的历史记录中生成一条记录,并替换前一条记录。举个例子,当我们打开“a.html”页面,页面内有如下两行代码:
document.location.href="c.html";document.location.replace("b.html");
浏览器先通过location.href
的方式跳转到c.html,接着又使用location.replace
跳转到b.html。此时点击浏览器的后退按钮,浏览器会直接返回a.html,因为c.html这条历史记录被replace覆盖了。
3.window.onhashchange
我们可以通过如下代码形式来监听浏览器URL的哈希值变化:
window.addEventListener("hashchange",function(){ //do something },false);//以下代码都会触发hashchange事件 document.location.hash="#a=1";document.location.href="b.html#b=1";document.location.replace("c.html#c=1");
当我们通过改写location的方式引起浏览器URL哈希值变化时,hashchange事件就会触发。如果URL重写导致了页面刷新(例如改变了URL查询参数,或者直接跳向一个跨域地址),hashchange事件会直接被跳过。请注意,URL哈希值变化不一定总是会触发hashchange事件,下面要介绍的方法就是改动URL但不触发hashchange。
4. history.pushState
pushState方法接收三个参数:一个记录历史状态的对象(该对象会在popstate事件触发时被传入,有640K的大小限制);一个代表历史记录标题的字符串;一个与当前URL同源的地址。典型的使用方式如下:
history.pushState({}, "", "b.html");
history.pushState()
方法会将URL设置为一个同源URL值,在此之后发送的Ajax请求的Referrer头部都会使用这个新的值,同时在浏览器历史记录中生成一条新的历史记录。但是pushState方法不会刷新页面,pushState引起的URL哈希值变化也不会触发hashchange事件。pushState如果设置了一条与当前URL完全相同的地址,浏览器的历史记录中仍然会新增一条记录。
5.history.replaceState
该方法与history.pushState
基本相同,唯一的区别就是replaceState会像location.replace
一样覆盖先前历史记录。
关于history.pushState和history.replaceState的更多介绍:
http://www.php.cn/
6.window.onpopstate
我们可以通过如下代码形式来监听浏览器的popstate事件:
window.addEventListener("popstate",function(event){ //do something},false);
与hashchange事件类似,popstate会在任何URL变化时触发(hashchange只会在哈希值变化时触发),并且history.pushState和history.replaceState也不会触发popstate事件。只有在浏览器后退、前进、重写哈希值的情况下才会触发popstate事件。如果URL重写导致了页面刷新(例如改变了URL查询参数,或者直接跳向一个跨域地址),popstate事件会直接被跳过。
这里请注意一下代码中传给事件函数的参数“event”,event参数中包含state对象,这个state对象就是在调用history.pushState和history.replaceState方法是传入的第一个状态参数,我们可以通过这种状态传递方式来对历史记录进行一定处理。
以上就是详解JavaScript操作URL的方法(单页应用常用)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

報錯的原因NameResolutionError(self.host,self,e)frome是由urllib3函式庫中的例外類型,這個錯誤的原因是DNS解析失敗,也就是說,試圖解析的主機名稱或IP位址無法找到。這可能是由於輸入的URL位址不正確,或DNS伺服器暫時無法使用所導致的。如何解決解決此錯誤的方法可能有以下幾種:檢查輸入的URL地址是否正確,確保它是可訪問的確保DNS伺服器可用,您可以嘗試在命令行中使用"ping"命令來測試DNS伺服器是否可用嘗試使用IP位址而不是主機名稱來存取網站如果是在代理

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

區別:1、定義不同,url是是統一資源定位符,而html是超文本標記語言;2、一個html中可以有很多個url,而一個url中只能存在一個html頁面;3、html指的是網頁,而url指的是網站位址。

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest
