Не удалось выполнить "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
. Я подозреваю, что это потому, что Ваш 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',
Вы можете сохранить в локальный файл:
- 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.destroy()
функции описано здесь проблема ушла.
У меня была такая же проблема, и оказалось, что это потому, что у меня было расширение Chrome "HTTPS Everywhere". Отключение расширения решило мою проблему.
эта точная ошибка была связана с блоком контента Youtube, когда "playbacked на определенных сайтах или приложениях". Более конкретно WMG (Warner Music Group).
сообщение об ошибке, однако, предполагало, что импорт iframe https на http-сайт был проблемой, которой в этом случае не было.
удалить dns Prefetch решит эту проблему.
Если вы используете WordPress, добавьте эту строку в функции вашей темы.в PHP
remove_action( 'wp_head', 'wp_resource_hints', 2 );