Не удалось выполнить "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's origin 
('http://localhost:9000').

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

  1. Я не понимаю проблему. В чем проблема?
  2. как я могу это исправить?

10 ответов


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

например:

var id = getId(url);
  return '//www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&origin=http://localhost:9000';
}

для:

var id = getId(url);
  return 'https://www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&origin=http://localhost:9000';
}

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

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

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

в первый файл 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])}}());

во-вторых, найти как: этого.а.contentWindow.postMessage (a,b[c]);

и заменить на:

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

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

Источник : yt_api-concat

PS: извините, английский не мой первый язык.


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


просто добавьте параметр "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' },
}

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

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

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


попробуйте использовать window.location.href для url, чтобы соответствовать происхождению окна.


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


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

сообщение об ошибке, однако, предполагало, что импорт iframe https на http-сайт был проблемой, которой в этом случае не было.


удалить dns Prefetch решит эту проблему.

Если вы используете WordPress, добавьте эту строку в функции вашей темы.в PHP

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