我试图通过使用history.pushState
来检测YouTube上的页面更改,但似乎从未触发。我最终想从一个Tampermonkey/Greasemonkey的脚本这方面的工作,为此,我明白你需要注入脚本到实际的页面,我已经像这样做,但无济于事:YouTube未触发history.push状态
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);
};
但是,似乎也没有做到这一点。任何人都知道这里发生了什么?
是什么让你觉得'history.pushState'会检测到变化?该方法_adds_是历史记录的入口。检测change_需要监听popstate事件。 – CBroe
我重写了这个函数,或者至少是这个想法。 'onpopstate'似乎只在按下后退和前进按钮时触发(从我测试过的)。请参阅http://stackoverflow.com/a/4585031/1107110 –
啊,好的。首先检查了脚本插入是否真的有效?就像试图在那里放置一个'console.log'语句一样,看看是否生成了预期的输出... – CBroe