Отключить звук, созданный в iframe с объектом Audio - PullRequest
0 голосов
/ 24 мая 2019

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

1 Ответ

1 голос
/ 24 мая 2019

Нет, нет пути.

Мало того, что они могут использовать не добавленные элементы, как вы уже догадались, но они также могут использовать API-интерфейс Web Audio (что, как мне кажется, Phaser), и ни у вас нет способа получить к нему доступ извне, еслиони не раскрыли такой опции.

Ваш лучший ход - попросить разработчика этой игры предоставить API, где вы сможете это контролировать.
Например, это может бытьнекоторый параметр запроса в URL (https://thegame.url?muted=true) или даже API, основанный на Message API , где вы можете сделать iframe.contentWindow.postMessage({muted: true}) со своей собственной страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...