Javascript 防止某些网站上的广告发出声音

Javascript 防止某些网站上的广告发出声音,javascript,audio,Javascript,Audio,我试图使用我在StackExchange中找到的代码来阻止某些网站上的广告声音 Array.prototype.slice.call(document.querySelectorAll('audio')).forEach((audio)=>{ audio.muted = true; }); 我是这样实现代码的: // ==UserScript== // @name addicto // @namespace nms // @include http://

我试图使用我在StackExchange中找到的代码来阻止某些网站上的广告声音

Array.prototype.slice.call(document.querySelectorAll('audio')).forEach((audio)=>{
    audio.muted = true;
});
我是这样实现代码的:

// ==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.
});
/==UserScript==
//@name addicto
//@名称空间nms
//@包括http://*
//@包括https://*
//@version 1
//@grant none
//==/UserScript==
addEventListener('DOMContentLoaded',()=>{
let sites=['mako.co.il'];
让href=window.location.href;
for(设i=0;i{
audio.muted=true;
});
}
}
//如果href在“sites”数组中包含迭代的值,则执行一些操作。
});
这不起作用,我仍然能听到来自网站()的声音。也许这是因为当声音来自广告脚本时,代码不起作用


如果是这样的话,也许一个不错的解决方案是在所需的网站上禁用除我的脚本之外的任何其他脚本?或者其他什么?

当您运行该脚本时,很可能DOM还没有加载。将其包装在
DOMContentLoaded
事件侦听器中。@Xufox我刚刚试过。遗憾的是,没有成功。。。我已经用精确的代码更新了问题。在这种情况下,这些
元素是动态插入的。尝试一个
MutationObserver
!这里的意思是,我应该“观察DOM突变,包括在广告中添加与视频相关的音频标记,并以删除它们作为响应”,对吗?基本上就是这样,是的。当您运行该脚本时,很可能您的DOM还没有加载。将其包装在
DOMContentLoaded
事件侦听器中。@Xufox我刚刚试过。遗憾的是,没有成功。。。我已经用精确的代码更新了问题。在这种情况下,这些
元素是动态插入的。尝试一个
MutationObserver
!这里的意思是,我应该“观察DOM突变,包括在广告中添加与视频相关的音频标记,并移除它们作为响应”,对吗?基本上就是这样,是的。