Не удалось выполнить '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
.
- Я не понимаю проблему. В чем проблема?
- как я могу это исправить?
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',
Вы можете сохранить в локальный файл:
- https://www.youtube.com/player_api
- https://s.ytimg.com/yts/jsbin/www-widgetapi-vfluxKqfs/www-widgetapi.js
в первый файл, 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()
функции описано здесь проблема ушла.
У меня была такая же проблема, и оказалось, что это потому, что у меня было расширение Chrome "HTTPS Everywhere". Отключение расширения решило мою проблему.