javascript - YouTube 未触发 history.pushState

标签 javascript youtube html5-history

我正在尝试使用 history.pushState 检测 YouTube 上的页面更改,但它似乎从未触发过。我最终想通过 Tampermonkey/Greasemonkey 脚本实现此功能,为此我知道您需要将脚本注入(inject)实际页面,我已经这样做了,但无济于事:

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);
};

但这似乎也没有做到。有人知道这里发生了什么吗?

最佳答案

YouTube 使用 spfjs操纵 pushState。然而,它通常在你可以猴子修补它之前捕获这个功能。这就是您遇到此问题的原因。

要么在加载 spf.js 之前在页面中向上移动您的猴子补丁脚本,要么您可以查找 spf events像 spfdone 来检测变化。

关于javascript - YouTube 未触发 history.pushState,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30199242/

相关文章:

javascript - VueJS v-for 类交替

javascript - 从文本框 jquery/javascript 数组中获取单个文本框值

javascript - Reactjs 使用相似的按钮将不同的属性传递给相同的函数?

youtube - youtube视频中的CPN是什么

api - 通过YouTube合作伙伴Api向全局发送所有权区域

javascript - 在浏览器上哪些情况可能导致 window.history.state 为空?

javascript - 如何检查函数是否抛出包含 Jest 文本的错误?

youtube - 如何撤消上传视频的 youtube 更改

javascript - 更改浏览器中的 URL 而不使用 JavaScript 加载新页面

javascript - HTML5历史API : window.history.back()丢失history.state