當歷史狀態被修改時,是否有一些事件可以訂閱?怎麼樣?如何檢測history.pushState和history.replaceState的使用時間?
28
A
回答
27
的onpopstate事件應該被解僱了當歷史的變化,你可以給它綁定在你的代碼是這樣的:
window.onpopstate = function (event) {
// do stuff here
}
此事件可能也被解僱在頁面加載時,就可以判斷該事件是否通過檢查對國有資產的事件對象發射從頁面加載,或通過使用pushState的/ replaceState,這將是不確定的,如果事件是由頁面加載
window.onpopstate = function (event) {
if (event.state) {
// history changed because of pushState/replaceState
} else {
// history changed because of a page load
}
}
有造成目前尚無onpushstate事件不幸,爲了解決這個問題,你需要包裝pushState和replaceState方法都可以實現您自己的onpushstate事件。
我有一個庫,使pushState工作更容易一些,它可能是值得檢查出Davis.js,它提供了一個簡單的API與基於pushState的路由工作。
13
我用這個也被通知當pushState
和replaceState
被稱爲的:
// 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('replaceState', function(e) {
console.warn('THEY DID IT AGAIN!');
});
它通常是矯枉過正,但。它可能不適用於所有瀏覽器。 (我只關心我的瀏覽器版本。)
注意:它也不適用於Google Chrome擴展程序內容腳本,因爲它不允許更改網站的JS環境。你可以通過在代碼中插入一個<script>
來解決這個問題,但這更加矯枉過正。
相關問題
- 1. 如何使用history.pushState?
- 2. Html4瀏覽器不支持HTML5歷史API的history.pushState和history.replaceState方法
- 3. 頁面上沒有檢測到JavaScript(history.pushState)
- 4. 使用history.pushState後檢測瀏覽器後退按鈕
- 5. 如何查找NFC TAG檢測時間和讀取時間?
- 6. 在使用history.pushState時阻止404使用
- 7. 如何使用PhoneGap的iOS和檢測,如果調用時不
- 8. 檢測何時使用vs和
- 9. 如何檢測使用Jqtouch輕觸按鈕的時間?
- 10. 如何檢測何時使用MKUserTrackingBarButtonItem
- 11. 使用python檢測空閒時間
- 12. 使用JavaScript檢測 和空間
- 13. 使用SoX檢測和打印沉默週期的時間戳
- 14. 使用BigQuery的峯值檢測和事件持續時間
- 15. 如何在使用帶有history.pushstate和popstate的後退按鈕時觸發更改?
- 16. 如何檢測時間機器?
- 17. 如何檢測網絡空閒時間?
- 18. 如何檢測時間已過午夜?
- 19. 如何在javascript/jquery中使用webworker來檢測空閒時間?
- 20. 使用javascript檢測用戶位置和當前時間?
- 21. 使用history.pushState和rails ajax請求
- 22. 時間軸檢測
- 23. 如何使用Asp.NET Web Api檢測高CPU和長響應時間問題
- 24. Web應用程序如何檢測用戶的空閒時間?
- 25. 使用Spark和R進行時間序列趨勢檢測
- 26. iphone7 JS history.replaceState
- 27. 檢測ibeacon的時間:背景和前景時間
- 28. 如何檢查的時間和日期使用PHP
- 29. 如何使用C++檢查時間?
- 30. 使用history.replaceState更改url前狀態
似乎event.state可能仍然在頁面加載(Chrome)上設置。 – GolezTrol 2011-07-20 15:29:56
Mozilla/Firefox在頁面加載時不發出onpopstate事件,但Safari/Chrome做 – tom 2012-07-23 23:25:12
在我的情況下,這個事件發生在ajax調用成功之後。可能由於這個原因,我無法第一次檢測到事件。如果我點擊後退/前進按鈕,那麼它的效果很好,但我不希望我的用戶點擊這些歷史按鈕。 – 2016-08-06 17:55:59