【问题标题】:Turn Off Youtube Annotations Using JavaScript使用 JavaScript 关闭 Youtube 注释
【发布时间】:2014-07-04 10:49:29
【问题描述】:

目前我知道有三种方法可以禁用 youtube 视频中的注释:

  1. 您可以使用 YouTube 设置。这对我不起作用,因为我没有(也不想要)帐户。
  2. 您可以使用专门的扩展。这可能行得通,但我宁愿没有一个包含大量选项的完整扩展,仅此而已。
  3. 您可以使用(广告)屏蔽扩展程序,并将||youtube.com/annotations_ 添加到其过滤器中。这与前一点存在相同的问题。此外,它会完全禁用它们,而我只是希望它们默认关闭(所以我可以选择打开它们)。

是否可以使用 JavaScript 来实现?我有一个用户脚本,它已经对 YouTube 的网站进行了一些修改,所以理想情况下我想扩展它。这真的是我错过的最后一件事。

我要求答案仅限于使用 JS 而不是浏览器扩展建议。既是因为(如前所述),我已经知道这些,而且因为这既是关于学习过程的,也是关于结果的。更多用户脚本的练习。

【问题讨论】:

    标签: javascript youtube


    【解决方案1】:

    由于 youtube 有时会改变玩家的行为,我会尽量使代码保持最新并尽可能健壮。

    var settings_button = document.querySelector(".ytp-settings-button");
    settings_button.click(); settings_button.click(); // open and close settings, so annotations label is created
    
    var all_labels = document.getElementsByClassName("ytp-menuitem-label");
    for (var i = 0; i < all_labels.length; i++) {
      if ((all_labels[i].innerHTML == "Annotations") && (all_labels[i].parentNode.getAttribute("aria-checked") == "true")) { // find the correct label and see if it is active
        all_labels[i].click(); // and in that case, click it
      }
    }
    

    【讨论】:

    • 仅供参考 - 您只需要在设置按钮出现后单击它。如果你想检查它是否已经被禁用(所以你不要重新启用它):if(document.querySelectorAll("div[role='menuitemcheckbox']")[1].getAttribute("aria-checked") == "true")
    • 能否修改为同时禁用自动播放并使用嵌入视频?
    【解决方案2】:

    用户密码正确,设置需要点击&然后:

    document.querySelectorAll("div[role='menuitemcheckbox']")[1].click() 
    

    我将它添加到我的“关闭自动播放和注释”脚本中:https://gist.github.com/Sytric/4700ee977f427e22c9b0


    以前工作的 JS:

    document.querySelectorAll("div[aria-labelledby=\"ytp-menu-iv\"]")[0].click()
    

    【讨论】:

    • 这对你有用吗?因为它不适合我(旧的也不适合,因为他们添加了自动播放)。注释默认是打开的,所以不需要检查。即使你没有登录,自动播放也会被记住,所以我不确定你为什么需要一个用户脚本。
    • 这个在 Firefox 上一直为我工作——还没有在其他浏览器上测试过。我会进行检查,因为“有时”YT 会记住我的选择,而其他时候则不会。
    • 啊,我明白了这个问题 - 我专注于我自己的自动播放问题,所以文档 querySelector 只是返回自动播放按钮(ytp-segmented-control-other 数组中的第一个) .我们可以通过返回数组中的第二个元素并执行相同的功能来解决这个问题,现在编辑答案
    【解决方案3】:

    我知道您不想为此使用扩展程序,但这是解决您的问题的最灵活、最简单的方法。 扩展使我们能够使用后台脚本,通过它我们可以将 css 和 javascript 注入打开的网页。 我对此做了一个扩展 https://chrome.google.com/webstore/detail/hide-labels-and-end-cards/jinenhpepbpkepablpjjchejlabbpken 这也有一个停止启动按钮,我只是像以前一样注入相反的代码。 如果您在这方面需要任何进一步的帮助,我将很乐意这样做。

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 这只涉及嵌入式视频,这根本不是我的用例。我指定它用于 UserScript,我所有的解决方案都只涉及客户端。这是用于我无法控制的视频。
      • 呃,你特别说“是否可以使用 JavaScript 来做到这一点?”。对的,这是可能的。只需发现包含视频的对象并设置加载策略。您还说“我要求答案仅限于使用 JS 而不是浏览器扩展建议”,但 UserScripts 本身就是一个扩展。如果你想要一个 JS 解决方案,通过说 jQuery 找到视频对象并设置加载策略。还有一些 RESTful API 调用可以为您完成工作。
      • “浏览器扩展recommendations”意味着(自然)已经存在的东西(因此,“推荐”)。您不需要扩展程序来运行用户脚本(无论如何,在 Chrome 中不需要)。虽然您可能会争辩说 UserScript 本身就是一个扩展,但它是我正在尝试构建的扩展,而不是推荐的扩展。此外,您的答案(链接)仅适用于嵌入式视频,这意味着它无法在最重要的地方工作 - youtube 的网站。
      • @ZagNut - 我也曾尝试在不使用嵌入的情况下执行此操作 - 有没有一种方法可以成功地直接在 Youtube 页面上更改 iv_load_policy(并且实际上已经生效)?我用过一些 JS 技术都无济于事。
      • stackoverflow.com/questions/15643785/… 请注意,您只需将其附加到 url 参数即可使用该设置获取视频。这是使用来自 youtube 的视频执行此操作的解决方案。我只能假设拒绝投票是因为他们有一个从 youtube 下载的视频文件,并且想要直接在视频文件或其他东西上启用/禁用注释。通过youtube,这就是它的完成方式。另请注意,此处介绍的两种“div 隐藏”技术以及页面就绪解决方案都有效
      【解决方案5】:

      这是一个不错的解决方案,只需使用注释隐藏 div

      $("div.video-annotations").css("display", "none");

      【讨论】:

      • 除了代码不起作用(尽管我们可以将其更改为起作用)这一事实之外,它还存在多个问题。 1. 它只适用于运行时存在的注释,使其基本上无用,因为注释来来去去; 2.它隐藏了它们,但它没有关闭它们,这意味着我们必须关闭它们然后再打开它们才能再次显示; 3. 在某些情况下它不会隐藏整个注解,因为某些注解的某些部分没有我们可以挂钩的固定类。
      • $(document).ready(function(){ $(".video-annotations, .ytp-player-content").css("display","none"); }); $("body").bind("DOMSubtreeModified", function() { $(".video-annotations, .ytp-player-content").css("display","none"); }); // just listen changes on body content 隐藏所有不需要的内容!你可以用同样的方式取消隐藏它们!
      猜你喜欢
      • 1970-01-01
      • 2010-09-05
      • 2016-03-05
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多