Я извиняюсь перед тем, как меня очень смущает моя проблема. Я действительно привязан, потому что это вызывает проблемы на моем рабочем сайте.Не удалось выполнить «postMessage» в «DOMWindow»: несоответствие цели/происхождения http vs https
У меня есть javascript-плеер на моем сайте, который воспроизводит списки песен, которые могут быть размещены на youtube, soundcloud или vimeo. Вчера я заметил эту ошибку, которая обычно возникает в любое время, когда вы пытаетесь загрузить новую песню с помощью «пропусков» с помощью кнопок проигрывателя. Эта ошибка только началась в последние сутки или два. Я не вижу ничего нового в примечаниях к выпуску youtube api, и эта ошибка возникает с использованием Chrome, Firefox и Safari, поэтому, скорее всего, это не связано с изменением в браузере. Что-то, что я использую, изменилось, так как я не подтолкнул новый код за 18 дней.
Пример списка воспроизведения здесь: http://www.muusical.com/playlists/programming-music
Я думаю, что изолировали способ воспроизвести ошибку, вот шаги:
- Сыграйте YouTube прошла песню.
- Пропустить и перейти к следующей песне в списке (нажав кнопку пропуска или нажав кнопку воспроизведения в элементе строки песни).
* Обратите внимание, что если первая песня в плейлисте - это песня youtube, просто переход к другой песне даже без воспроизведения первоначально загруженной песни YouTube приведет к ошибке.
По сути, ошибка возникает, если вы загрузили и/или воспроизвели песню на YouTube, и попытаетесь перейти к другой песне.
Сообщите мне, если вы обнаружили исключение из этого поведения.
Я вижу эту ошибку в консоли:
Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('https://www.muusical.com') does not match the recipient window's origin ('http://www.muusical.com').
загружает игрок с помощью YouTube JavaScript API:
new YT.Player('playlist-player', {
playerVars: { 'autoplay': 1, 'fs': 0 },
videoId: "gJ6APKIjFQY",
events: {
'onReady': @initPlayerControls,
'onStateChange': @onPlayerStateChange
}
})
Который производит этот IFRAME:
<iframe id="playlist-player" frameborder="0" allowfullscreen="1" title="YouTube video player" width="640" height="360" src="https://www.youtube.com/embed/gJ6APKIjFQY?autoplay=1&enablejsapi=1&origin=http%3A%2F%2Fwww.muusical.com"></iframe>
После ударив пропущенную выше песню youtube, это то, что я вижу загруженным в iframe:
<iframe id="playlist-player" frameborder="0" allowfullscreen="1" title="YouTube video player" width="640" height="360" src=""></iframe>
Я поддерживаю youtube, soundcloud и vimeo песни. Кажется, что после того, как песня youtube загружена, «происхождение» изменяется с http на https. Я не думаю, что необходимо включить методы внедрения других хостов, поскольку эта ошибка возникает, даже если весь плейлист является только youtube, и это не происходит в плейлисте, который состоит только из песен из soundcloud и vimeo.
Кроме того, это, как я загрузке JavaScript Ютюбе:
// Load the IFrame Player API code asynchronously.
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
Пожалуйста, дайте мне знать, если вам нужно мне прояснить что-либо и заранее спасибо за то посмотреть.
Благодарим за отзыв! Я действительно запускаю метод destroy() на проигрывателе, когда избавляюсь от него, но на самом деле я не прочитал все обсуждения в указанной вами ссылке. Я пробовал различные комбинации настройки http/https в начале или нет и динамически загружаемый скрипт, но я рассмотрю эту дискуссию немного научнее и, надеюсь, это наконец даст. :) – wuliwong
Какие из ваших проектов у вас были проблемы? Похоже, у вас есть несколько музыкальных сайтов с игроками. :) – wuliwong
Вы на самом деле пошли на мой сайт lol :) Не знаю, стоит ли публиковать его здесь, но эй ... он уже в сети :) http://manec.fr: каждый раз, когда вы попадаете на планету, вы открываете раздел с другим проигрывателем YouTube (внизу справа) – sodawillow