Не удалось выполнить 'postMessage' в 'DOMWindow': https://www.youtube.com! == http://localhost: 9000

Это сообщение об ошибке, которое я получаю:

Failed to execute 'postMessage' on 'DOMWindow': The target origin provided
('https://www.youtube.com') does not match the recipient window origin 
('http://localhost:9000').

Я видел другие аналогичные проблемы, где целевое происхождение http://www.youtube.com, а начало получателя - https://www.youtube.com, но не похоже на мое, где цель https://www.youtube.com, а начало - http://localhost:9000.

  • У меня проблемы. В чем проблема?
  • Как я могу это исправить?

Ответ 1

Я считаю, что это проблема с целевым источником https. Я подозреваю, что это потому, что ваш iFrame URL использует http вместо https. Попробуйте изменить URL-адрес файла, который вы хотите встроить в https.

Например:

'//www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&origin=http://localhost:9000';

быть:

'https://www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&origin=http://localhost:9000';

Ответ 2

Просто добавьте параметр "origin" с URL вашего сайта в атрибут paramVars плеера, например так:

this.player = new window['YT'].Player('player', {
    videoId: this.mediaid,
    width:'100%',
    playerVars: { 'autoplay': 1, 'controls': 0,'autohide':1,'wmode':'opaque','origin':'http://localhost:8100' },
}

Ответ 3

Установка это, кажется, исправить это:

  this$1.player = new YouTube.Player(this$1.elementId, {
    videoId: videoId,
    host: 'https://www.youtube.com',

Ответ 4

Вы можете сохранить JavaScript в локальных файлах:

В первый файл player_api поместите этот код:

if(!window.YT)var YT={loading:0,loaded:0};if(!window.YTConfig)var YTConfig={host:"https://www.youtube.com"};YT.loading||(YT.loading=1,function(){var o=[];YT.ready=function(n){YT.loaded?n():o.push(n)},window.onYTReady=function(){YT.loaded=1;for(var n=0;n<o.length;n++)try{o[n]()}catch(i){}},YT.setConfig=function(o){for(var n in o)o.hasOwnProperty(n)&&(YTConfig[n]=o[n])}}());

Во втором файле найдите код: this.a.contentWindow.postMessage(a,b[c]);

и замените его на:

if(this._skiped){
    this.a.contentWindow.postMessage(a,b[c]); 
}
this._skiped = true;

Конечно, вы можете объединить в один файл - будет эффективнее. Это не идеальное решение, но оно работает!

Мой источник: yt_api-concat

Ответ 5

Убедитесь, что вы загружаете с URL-адреса, такого как:

https://www.youtube.com/embed/HIbAz29L-FA?modestbranding=1&playsinline=0&showinfo=0&enablejsapi=1&origin=https%3A%2F%2Fintercoin.org&widgetid=1

Обратите внимание на компонент "origin", а также "enablejsapi = 1". Источник должен совпадать с вашим доменом, и тогда он будет в белом списке и будет работать.

Ответ 6

Попробуйте использовать window.location.href, чтобы URL-адрес соответствовал началу окна.

Ответ 7

Я получил ту же ошибку. Моя ошибка состояла в том, что параметр enablejsapi=1 не присутствовал в iframe src.

Ответ 8

Я думаю, что описание ошибки вводит в заблуждение и изначально связано с неправильным использованием объекта игрока.

У меня была такая же проблема при переключении на новые видео в слайдере.

Если просто использовать функцию player.destroy() описанную здесь, проблема исчезла.

Ответ 9

У меня была такая же проблема, и оказалось, что это было потому, что у меня было расширение Chrome "HTTPS Everywhere". Отключение расширения решило мою проблему.

Ответ 10

Эта точная ошибка была связана с блокировкой контента Youtube при "воспроизведении на определенных сайтах или в приложениях". В частности, от WMG (Warner Music Group).

Однако в сообщении об ошибке указывалось, что проблема заключается в импорте iframe https на сайт http, чего не было в данном случае.

Ответ 11

Удаление DNS Prefetch решит эту проблему.

Если вы используете WordPress, добавьте эту строку в вашу тему functions.php

remove_action( 'wp_head', 'wp_resource_hints', 2 );

Ответ 12

Вы можете изменить свой iframe таким образом, чтобы он добавлял origin в качестве текущего сайта. Это устраняет ошибку в моем браузере.

<iframe class="test-testimonials-youtube-group"  type="text/html" width="100%" height="100%"
  src="http://www.youtube.com/embed/HiIsKeXN7qg?enablejsapi=1&origin=http://localhost:8000"
  frameborder="0">
</div>

ссылка: https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player

Ответ 13

Может быть любое из следующего, но все они ведут в DOM, не загруженный до того, как к нему обращается javascript.

Итак, вот что вы должны убедиться перед фактическим вызовом JS-кода: * Убедитесь, что контейнер загружен до вызова любого javascript * Убедитесь, что целевой URL загружен в любой контейнер, к которому он должен

Я сталкивался с подобной проблемой, но на моем локальном компьютере, когда я пытаюсь запустить Javascript задолго до onLoad главной страницы, что вызывает сообщение об ошибке. Я исправил это, просто ожидая загрузки всей страницы и затем вызывая требуемую функцию.

Вы можете просто сделать это, добавив функцию тайм-аута, когда страница загрузится, и вызвать событие onload, например:

window.onload = new function() {setTimeout (function() {//некоторое событие загрузки), 10); } }

это гарантирует, что то, что вы пытаетесь, будет хорошо выполняться после запуска onLoad.

Ответ 14

мой был:

<youtube-player
  [videoId]="'paxSz8UblDs'"
  [playerVars]="playerVars"
  [width]="291"
  [height]="194">
</youtube-player>

Я только что удалил строку с playerVars, и она работала без ошибок на консоли.

Ответ 15

Ты можешь попробовать : document.getElementById('your_id_iframe'). contentWindow.postMessage('your_message', 'your_domain_iframe')