Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Greasemonkey:去除某些“油脂”;相关视频“;通过Youtube播放器中的关键字_Javascript_Jquery_Youtube_Greasemonkey - Fatal编程技术网

Javascript Greasemonkey:去除某些“油脂”;相关视频“;通过Youtube播放器中的关键字

Javascript Greasemonkey:去除某些“油脂”;相关视频“;通过Youtube播放器中的关键字,javascript,jquery,youtube,greasemonkey,Javascript,Jquery,Youtube,Greasemonkey,我正试图通过关键字从Youtube播放器(在视频末尾显示)中删除某些“相关视频”。这样做的目的是,有时我不想看到某些内容 我是个十足的油嘴滑舌的傻瓜。然而,到目前为止,我提出的最好的建议如下。此示例删除任何带有关键字“解剖”的“相关视频” 为了用自然语言进行解释,上面的代码依赖于waitforkyellements来监听#player api元素发生的更改,该元素包含“相关视频”。函数“action”将#player api保存到playerapi中。lastapi是旧的playerapi内容。

我正试图通过关键字从Youtube播放器(在视频末尾显示)中删除某些“相关视频”。这样做的目的是,有时我不想看到某些内容

我是个十足的油嘴滑舌的傻瓜。然而,到目前为止,我提出的最好的建议如下。此示例删除任何带有关键字“解剖”的“相关视频”

为了用自然语言进行解释,上面的代码依赖于waitforkyellements来监听#player api元素发生的更改,该元素包含“相关视频”。函数“action”将#player api保存到playerapi中。lastapi是旧的playerapi内容。如果playerapi发生了更改,则带有关键字“解剖学”的“相关视频”将由正则表达式删除。playerapi保存到lastapi中,以便下次比较

现在试着搜索“格雷的解剖”(对不起,我并不反对这个节目,只是一个例子)。然后转到视频的结尾。您将看到,标题中包含“解剖学”的任何“相关视频”都将被删除(在其他“相关视频”中被一个黑色方框取代)。这与预期的效果一样(正则表达式也是如此)

当您单击侧边栏(右侧)中的相关视频时,问题就开始了。再次转到视频的结尾。您将看到脚本已停止过滤带有关键字“解剖”的后续“相关视频”。但是,如果从浏览器中按“重新加载”,脚本将再次正确过滤。(我知道如何删除侧边栏视频,这里没有包含代码)

诊断:当你点击侧边栏中的“相关视频”时,Youtube不会更新#player api元素本身,而是动态更新页面中的其他元素(我不知道是哪个)#播放器api本身不会更改(除非您重新加载整个Youtube页面),因此函数“action”永远不会找到要操作的已更改的播放器api,除非您“重新加载”整个页面

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


提前谢谢。

谷歌网站是一个真正需要编写脚本的平台,所以你可能不会马上得到这个问题的答案。同时,确保谷歌/Youtube的内容过滤器和/或“安全模式”不能被强迫做你想做的事情。另外,请搜索“YouTube过滤器”附加组件。谢谢您的建议。
// ==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;
}