淺談通過JS攔截 pushState和replaceState事件
history.pushState 和 history.replaceState 可以在不刷新當(dāng)前頁面的情況下更改URL,但是這樣就無法獲取通過AJAX得到的新頁面的內(nèi)容了。
雖然各種HTML5文檔說 window.onpopstate 事件可以攔截 pushState 的消息,但在實(shí)際的測(cè)試中, onpopstate 根本沒有任何作用,無法攔截 pushState 的消息。
經(jīng)過Google一番,才找到了正確獲取 pushState 事件的代碼
https://stackoverflow.com/a/25673911
// Add this: var _wr = function(type) { var orig = history[type]; return function() { var rv = orig.apply(this, arguments); var e = new Event(type); e.arguments = arguments; window.dispatchEvent(e); return rv; }; }; history.pushState = _wr('pushState'); history.replaceState = _wr('replaceState'); // Use it like this: window.addEventListener('pushState', function(e) { console.warn('THEY DID IT AGAIN!'); }); window.addEventListener('replaceState', function(e) { console.warn('THEY DID IT AGAIN!'); });
這段代碼改寫了 history 中原來的函數(shù),然后自己激活一個(gè)事件
這樣就可以解決 pushState 無法激活事件的問題了
另外記得最好將這段代碼放在文檔加載前執(zhí)行
以上這篇淺談通過JS攔截 pushState和replaceState事件就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
全面解析Bootstrap中transition、affix的使用方法
這篇文章主要為大家詳細(xì)解析了Bootstrap中transition、affix的使用方法,感興趣的朋友可以參考一下2016-05-05JavaScript實(shí)現(xiàn)的數(shù)字與字符串轉(zhuǎn)換功能示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的數(shù)字與字符串轉(zhuǎn)換功能,涉及javascript數(shù)字、字符串等運(yùn)算與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2017-08-08javascript一些不錯(cuò)的函數(shù)腳本代碼
收集一些不多見的好用的自定義函數(shù)代碼 計(jì)算字符長(zhǎng)度的js函數(shù) 去字符中前后的空格的js函數(shù) 圖片自適應(yīng)大小函數(shù)代碼2008-09-09關(guān)于scrollLeft,scrollTop的瀏覽器兼容性測(cè)試
彈窗在谷歌瀏覽器chrome下的位置跟在別的瀏覽器下不一樣,接下來介紹下scrollLeft,scrollTop的瀏覽器兼容性,感興趣的你可以參考下哈2013-03-03基于element-ui組件手動(dòng)實(shí)現(xiàn)單選和上傳功能
在用戶使用過程中提出一鍵導(dǎo)入的功能,需求如下:點(diǎn)擊導(dǎo)入按鈕顯示提示框,然后是單選框以及上傳按鈕。這篇文章主要介紹了基于element-ui組件手動(dòng)實(shí)現(xiàn)單選和上傳功能,需要的朋友可以參考下2018-12-12