javascript - 如何防止浏览器预加载 <video> 标签?

标签 javascript userscripts

我用 JavaScript 为 Chrome 编写了一个用户脚本扩展,以防止视频和音频标签在页面加载时自动下载

这是代码:

var videoTags = document.getElementsByTagName("Video");
var i;
for(i=0; i<videoTags.length; i++)
{
    videoTags[i].setAttribute("preload", "none");
    videoTags[i].removeAttribute("autoplay");
}

var audioTags = document.getElementsByTagName("audio");
var i;
for(i=0; i<audioTags.length; i++)
{
    audioTags[i].setAttribute("preload", "none");
    audioTags[i].removeAttribute("autoplay");
}

这是 manifest.json 文件:

   {
      "content_scripts": [ {
      "exclude_globs": [  ],
      "exclude_matches": [  ],
      "include_globs": [ "*" ],
      "js": [ "script.js" ],
      "matches": [ "http://*/*", "https://*/*" ],
      "run_at": "document_start"
   } ],
      "converted_from_user_script": true,
      "description": "",
      "key": "an2xaeZJluPfnpmcsHPXI4aajQPL1cBm5C2kKjaQwXA=",
      "name": "test.user.js",
      "version": "1.0"
  }

问题是我的脚本会在片刻之后运行,直到浏览器 (Chrome) 下载视频/音频文件的一部分。

最佳答案

一个似乎可行的肮脏解决方案是使用 MutationObserver从您的用户脚本,一旦您确定它确实在文档开始时运行。

这个 TamperMonkey 脚本对我有用:

// ==UserScript==
// @name         Block videos preloading
// @include      *
// @run-at document-start
// ==/UserScript==

(function() {
  'use strict';
  var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutation) {
      var nodes = mutation.addedNodes;
      for (var i = 0; i < nodes.length; i++) {
        if (nodes[i].nodeName == "VIDEO") {
          nodes[i].setAttribute('preload', 'none');
          nodes[i].removeAttribute('autoplay');
        }
      }
    })
  });
  observer.observe(document.documentElement, {
    childList: true,
    subtree: true
  });

})();

如果您不希望脚本随后插入其他视频元素,您可能需要在 DOMContentLoaded 上调用 observer.disconnect()

关于javascript - 如何防止浏览器预加载 <video> 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37904871/

相关文章:

javascript - 链接 anchor 文本以打开特定选项卡

javascript - 具有异步初始化的 Express 中间件

javascript - Scriptish 脚本需要刷新页面才能运行?

javascript - 如何防止自定义按键绑定(bind)发出噪音?

javascript - jQuery 中的通知

javascript - 在 Greasemonkey/Javascript 中激活 Firefox 选项卡?这可能吗?

javascript - 将文本向右环绕,在一个圆圈内

javascript - 如何使用用户脚本覆盖函数?

javascript - 无法使用 Javascript 和 WebView 单击 HTML 输入按钮(可能是 iframe 问题,不确定)

javascript - Google Chrome 中将 Javascript 插入网站的简单方法是什么?