documentation for the popstate
Window event指出:
请注意,只需致电
history.pushState()
或history.replaceState()
不会触发popstate
事件。的popstate
事件将通过执行浏览器操作(例如 单击后退或前进按钮(或致电history.back()
或history.forward()
(在JavaScript中)。
当URL更改时,我需要一种不触发popstate
事件(例如history.replaceState()
)的方式来执行一些代码。 最好使用MutationObserver API [1] ,并且绝对不要每隔x秒轮询一次URL。
此外,hashchange
不会这样做,因为我必须对URL中的每个 更改采取行动,而不仅仅是哈希部分。
有可能吗?
[1] 说明了on another question为什么MutationObserver API对此不起作用。
(其他)相关问题:
答案 0 :(得分:1)
您需要重新定义(包装)其他脚本使用的history.replaceState
:
(function(){
var rs = history.replaceState;
history.replaceState = function(){
rs.apply(history, arguments); // preserve normal functionality
console.log("navigating", arguments); // do something extra here; raise an event
};
}());
没有投票,没有浪费,没有重写,没有麻烦。
对pushState或编写用户脚本时希望/需要的其他任何本机(例如ajax)执行相同的操作。