Не удалось выполнить '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 93

10 ответов:

Я считаю, что это проблема с целевым происхождениемhttps. Я подозреваю, что это потому, что ваш iframe url использует 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.

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

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

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

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

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

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

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

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

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