Я работаю с 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?