【发布时间】:2017-10-20 07:18:01
【问题描述】:
我尝试使用以下用户脚本从某个网站删除所有音频:
// ==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 正是我需要更好地处理这个问题。
这个变异观察者怎么写?我从来没有写过一个变异观察者,我觉得这个例子会很短而且非常基本,正是我需要了解我刚刚描述的逻辑的代码上下文,我非常感谢任何愿意试着把它展示给我和其他遇到类似问题的人。
【问题讨论】:
-
可能不是问题,但请注意,您的脚本不会静音所有可能由选项卡传播的声音来源,只会静音作为 HTMLAudioElement 附加到 DOM 中的声音来源。如果在 iframe 中,它将错过所有不在 DOM 中的 HTMLAudioElements、所有视频元素、所有 AudioContexts 以及所有上述 + 附加到 DOM 的内容。如果一个真正的扩展是一个选项,那么使用chrome.tabs API 和
update(tabId, {muted:true})方法可能会更容易
标签: javascript html5-audio mutation-observers