YouTube未触发history.pushState

时间:2015-05-12 18:54:41

标签: javascript youtube html5-history

我尝试使用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);
};

但这似乎也没有。任何人都知道这里发生了什么?

1 个答案:

答案 0 :(得分:4)

YouTube使用spfjs来操纵pushState。然而,它通常在你修补它之前抓住这个功能。这就是您遇到此问题的原因。

在加载spf.js之前,在页面中移动你的猴子补丁脚本,或者你可以寻找spf events像spfdone来检测变化。