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