javascript - JavaScript 不会将音频静音 - 需要使用mutationobserver 删除音频标签

标签 javascript html5-audio mutation-observers

我尝试使用以下用户脚本删除某个网站的所有音频:

// ==UserScript==
// @name        addicto
// @namespace   nms
// @include     http://*
// @include     https://*
// @version     1
// @grant       none
// ==/UserScript==

addEventListener('DOMContentLoaded', ()=>{
  let sites = ['mako.co.il'];
  let href = window.location.href;
  for (let i = 0; i < sites.length; i++) {
    if (href.includes(sites[i])) {
      Array.prototype.slice.call(document.querySelectorAll('audio')).forEach((audio)=>{
        audio.muted = true;
      });
    }
  }

  // If href includes the value of the iteration on the "sites" array, do stuff.
});

这段代码不起作用,我认为观察所有随机出现的 audio 标签并改变 DOM 正是我需要更好地处理这个问题的方法。

这个变异观察器怎么写?我从来没有写过一个突变观察者,我觉得这个例子会非常简短而且非常基本,而这正是我需要了解我刚刚描述的逻辑的代码上下文的,我非常感谢任何愿意的人尝试向我和其他有类似问题的人展示它。

最佳答案

  • 枚举突变以及每个突变的添加节点
  • 枚举节点的子元素,因为在页面加载期间使用超快的 getElementsByTagName 而不是超慢的 querySelectorAll 合并突变
  • 不要使用 @grant none,它会在页面上下文中运行您的用户脚本,除非您确实需要直接访问页面的 JavaScript 对象
  • 使用@run-at document-start在页面加载期间静音

// ==UserScript==
// @name     addicto
// @include  *
// @run-at   document-start
// ==/UserScript==

const sites = ['mako.co.il'];
if (sites.some(site => location.hostname.includes(site))) {
  new MutationObserver(mutations => {
    for (const m of mutations) {
      for (const node of m.addedNodes) {
        if (node.localName == 'audio') {
          audio.muted = true;
        } else if (node.firstElementChild) {
          for (const child of node.getElementsByTagName('audio')) {
            audio.muted = true;
          }
        }
      }
    }
  }).observe(document, {subtree: true, childList: true});
}

关于javascript - JavaScript 不会将音频静音 - 需要使用mutationobserver 删除音频标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46844127/

相关文章:

html - 有没有办法在 HTML5 中从相机捕获视频?

javascript - 检查突变观察者是否通过某些条件的最佳方法

javascript - 如何让 MutationObserver 多次工作?

javascript - 使用javascript在Gridview中设置下拉列表的值

javascript - 显示不同的产品变体

javascript - 用 html 标签替换文本区域中的字符

javascript - 检测 attachShadow 事件

javascript - HTML、javascript - 显示标签的输入值

javascript - 选择音乐文件夹 html

javascript - 我的 html5 自定义音频控件遇到一些问题