Greasemonkey:从Youtube播放器中删除关键字中的某些“相关视频”

时间:2013-10-25 10:07:28

标签: javascript jquery youtube greasemonkey

我正在尝试从Youtube播放器(显示在视频结尾处)中删除关键字中的某些“相关视频”。目的是有时候某些内容我不想看到。

我是一个总油脂和javascript noob。尽管如此,到目前为止我提出的最好的是如下。此示例使用关键字“anatomy”删除所有“相关视频”。

// ==UserScript==
// @name     Remove related youtubes2
// @include  http://*.youtube.com/*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// @require  https://gist.github.com/raw/2625891/waitForKeyElements.js
// @grant    GM_addStyle
// ==/UserScript==

waitForKeyElements ("#player-api", action);

function action (jNode) {
    var playerapi = jNode.html ();
    var lastapi = jNode.data ("lastapi") || "";
    if (playerapi != lastapi) {
        playerapi = playerapi.replace(/title%3D(.(?!%26))*?anatomy(?!%2C)(.(?!%2C))*?id%3D[\w-]{11}/ig, 'id%3D');
        playerapi = playerapi.replace(/id%3D[\w-]{11}(?!%2C)(?=([^&](?!%2C))*?anatomy)/ig, 'id%3D');
        jNode.html (playerapi);
        jNode.data ("lastapi", jNode.html ());
    }
    return true;
}

为了用自然语言解释它,上面的代码依赖于waitForKeyElements来监听#player-api元素发生的变化,其中包含“相关视频”。函数“action”将#player-api保存到playerapi中。 lastapi是旧的playerapi内容。如果playerapi发生了变化,那么带有关键字“anatomy”的“相关视频”将被正则表达式删除。 playerapi保存到lastapi以供下次比较。

现在尝试搜索“灰色的解剖结构”(对不起,我真的没有任何反对这个节目,只是一个例子)。然后转到视频的结尾。您将看到任何在其标题中具有“解剖结构”的“相关视频”将被删除(由其他“相关视频”中的黑色方块替换)。这可以按预期工作(与正则表达式一样)。

当您从侧边栏(右侧)单击相关视频时,问题就开始了。再次转到视频的末尾。您将看到该脚本已停止使用关键字“anatomy”过滤后续“相关视频”。但是,如果您从浏览器按重新加载,脚本将再次正确过滤。 (我知道如何删除侧边栏视频,并且此处未包含代码)。

诊断:当您从侧边栏单击“相关视频”时,Youtube不会更新#player-api元素本身,而是动态更新页面中的其他元素(我不知道哪个)。 #glayer-api本身不会改变(除非你重新加载整个Youtube页面),所以函数“action”永远不会找到一个改变的#glayer-api来操作,除非你“重新加载”整个页面。

问题:当您从侧边栏单击相关视频时,Youtube是否会刷新内联代码区域?如果是这样,我该如何解释?有没有更简单的方法来做这一切?

提前谢谢。

0 个答案:

没有答案