我尝试使用history.pushState
检测YouTube上的网页更改,但似乎从未触发过。我最终希望通过Tampermonkey / Greasemonkey脚本来实现这一点,为此我明白你需要将脚本注入实际页面,我已经这样做了,但无济于事:
html =
"var oldState = history.pushState;"+
"history.pushState = function() {" +
"alert('url changed');" +
"return oldState.apply(this);" +
"}";
var head = document.getElementsByTagName("body")[0];
var script = document.createElement('script');
script.type = 'text/javascript';
script.innerHTML = html;
head.appendChild(script);
我也试过从调试控制台运行相同的代码:
var oldState = history.pushState;
history.pushState = function() {
alert('url changed');
return oldState.apply(this);
};
但这似乎也没有。任何人都知道这里发生了什么?
答案 0 :(得分:4)
YouTube使用spfjs来操纵pushState。然而,它通常在你修补它之前抓住这个功能。这就是您遇到此问题的原因。
在加载spf.js之前,在页面中移动你的猴子补丁脚本,或者你可以寻找spf events像spfdone来检测变化。