如何使用JavaScript观察URL中的变化?

时间:2019-06-25 19:20:44

标签: javascript events mutation-observers

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对此不起作用。


(其他)相关问题:

1 个答案:

答案 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)执行相同的操作。