Общение между детскими фреймами - PullRequest
2 голосов
/ 12 мая 2019

Я построил плеер, который встроен через iframe.Если два игрока встроены, я хочу остановить одного, если другой начнет играть.Итак, вопрос в том, можно ли использовать postMessage для связи между двумя дочерними фреймами, не имея родителя?Vimeo делает это как-то.Если я встраиваю двух игроков vimeo и играю одного, то другого, второй игрок останавливает первого.Как?(подтверждение: https://jsfiddle.net/3fy14orw/2/)

В моем плеере я использую postMessage, чтобы вызвать событие в родительском окне, когда мой игрок играет. Я подтвердил, что это работает. Я пытался использовать мойфактическое происхождение, а также "*" для начала.

//in my player
window.parent.postMessage(data, "*");

Как может узнать другой игрок? Я пробовал,

//tried adding this in my player    
window.parent.addEventListener('message', function(evt) {});

Но это выдает ошибку.

"SecurityError: Blocked a frame with origin..."

Я также пытался присвоить имена своим фреймам и получить к ним доступ через объект window.parent.frames, но это также вызывает проблему с CORS.

Допущения:

  • Мои проигрыватели имеют одинаковое происхождение.
  • Мой проигрыватель может быть встроен в любой домен, а не только в мой собственный

1 Ответ

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

Вроде хак, но вы могли бы построить канал связи поверх localStorage .Кадры могут отправлять сообщения, записывая в localStorage, а затем читать сообщения, постоянно запрашивая localStorage на предмет изменений.

...