我正在使用iframe
包含我们从第三方收到的代码的代码。此第三方代码包含一个Canvas
并包含使用 Phaser 创建的游戏。
我正在寻找一种方法来静音这个游戏在某个时候所做的声音。
我们通常是这样做的:
function mute(node) {
// search for audio elements within the iframe
// for each audio element,(video, audio) attempt to mute it
const videoEls = node.getElementsByTagName('video');
for (let i = 0; i < videoEls.length; i += 1) {
videoEls[i].muted = true;
}
const audioEls = node.getElementsByTagName('audio');
for (let j = 0; j < audioEls.length; j += 1) {
audioEls[j].muted = true;
}
}
经过一番研究,我发现您可以在网页中播放声音new Audio([url])
,然后play
在创建的对象上调用该方法。mute
我们使用的函数的问题是,如果声音是用 产生的new Audio([url])
,它就不会拾取它。
有没有办法从容器中列出Audio
已在文档中创建的所有元素,或者是不可能的,并且创建了一种播放音频的方法,而 iframe 容器不可能将其静音?
不,没有办法。
他们不仅可以像你猜的那样使用非附加的 <audio> 元素,而且他们还可以使用 Web Audio API(我认为 phaser 可以),而且如果他们没有公开这样的内容,你也没有办法从外部访问它一个选项。
你最好的办法是询问这个游戏的开发者,它公开了一个你可以控制它的 API。
例如,它可以是 URL ( https://thegame.url?muted=true
)中的一些查询参数,甚至是基于Message API 的 API,您可以iframe.contentWindow.postMessage({muted: true})
在自己的页面中执行此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句