Este es el mensaje de error que recibo:
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').
He visto otros problemas similares donde está el origen del destino http://www.youtube.com
y el origen del destinatario https://www.youtube.com
, pero ninguno como el mío donde está el destino https://www.youtube.com
y el origen http://localhost:9000
.
- No entiendo el problema. ¿Cuál es el problema?
- ¿Cómo puedo arreglarlo?
javascript
angularjs
youtube
youtube-api
youtube-iframe-api
Adam Zerner
fuente
fuente
Respuestas:
Creo que este es un problema con el origen del destino
https
. Sospecho que es porque su URL de iFrame está usando enhttp
lugar dehttps
. Intenta cambiar la url del archivo que intentas insertar para que seahttps
.Por ejemplo:
ser - estar:
fuente
http
contrahttps
? ¿No importa que los dominios difieran (youtube vs. localhost)? ¿Y qué es exactamente el origen objetivo frente al origen receptor? ¿Cómo hizo lo que dijo que cambió el origen del destinatario (mi url sigue siendo localhost: 9000)?localhost:9000
. El problema estaba realmente en la forma en que usabas la youtube-api. Cuando declaras la API comotag.src = "https://www.youtube.com/iframe_api";
en tu código, le estás diciendo a YouTube que quieres usar SSL. Entonces, el cambio que sugerí lo cambió a usar ssl para solicitar los videos. El error solo decía que estaba mezclando llamadas ssl y no ssl.playerEl = document.querySelector('iframe#ytplayer'); anotherEl.appendChild(playerEl); // yt complains on subsequent api calls
Simplemente agregue el parámetro
"origin"
con la URL de su sitio en elparamVars
atributo del reproductor, así:fuente
window.location.origin
..window.location
es un objeto.window.location.host
Establecer esto parece solucionarlo:
fuente
http
(en lugar dehttps
) resolvió mi problema.host: `${window.location.protocol}//www.youtube.com`
,Puede guardar el JavaScript en archivos locales:
En el primer archivo,
player_api
ponga este código:En el segundo archivo, busque el código:
this.a.contentWindow.postMessage(a,b[c]);
y reemplazarlo con:
Por supuesto, puede concatenar en un archivo, será más eficiente. ¡Esta no es una solución perfecta, pero funciona!
Mi fuente: yt_api-concat
fuente
Asegúrese de cargar desde una URL como:
https://www.youtube.com/embed/HIbAz29L-FA?modestbranding=1&playsinline=0&showinfo=0&enablejsapi=1&origin=https%3A%2F%2Fintercoin.org&widgetid=1
Tenga en cuenta el componente "origen", así como "enablejsapi = 1". El origen debe coincidir con su dominio, y luego se incluirá en la lista blanca y funcionará.
fuente
Intente usar
window.location.href
la url para que coincida con el origen de la ventana.fuente
Tengo el mismo error. Mi error fue que el
enablejsapi=1
parámetro no estaba presente en eliframe
src.fuente
Creo que la descripción del error es engañosa y originalmente tiene que ver con el uso incorrecto del objeto jugador.
Tuve el mismo problema al cambiar a nuevos videos en un control deslizante.
Cuando simplemente se usa la
player.destroy()
función descrita aquí, el problema desaparece.fuente
Tuve este mismo problema y resultó que era porque tenía la extensión de Chrome "HTTPS Everywhere" ejecutándose. Deshabilitar la extensión resolvió mi problema.
fuente
Este error exacto estaba relacionado con un bloqueo de contenido de Youtube cuando se "reproducía en ciertos sitios o aplicaciones". Más específicamente por WMG (Warner Music Group).
Sin embargo, el mensaje de error sugirió que el problema era una importación de iframe https a un sitio http, lo que no fue en este caso.
fuente
Eliminar DNS Prefetch resolverá este problema.
Si está utilizando WordPress, agregue esta línea en las funciones de su tema.php
fuente
Puede cambiar su iframe para que sea así y agregar origen para que sea su sitio web actual. Resuelve el error en mi navegador.
ref: https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player
fuente
Podría haber cualquiera de los siguientes, pero todos ellos conducen a DOM no cargado antes de que javascript acceda a él.
Así que esto es lo que debe asegurarse antes de llamar realmente al código JS: * Asegúrese de que el contenedor se haya cargado antes de que se llame a javascript * Asegúrese de que la URL de destino esté cargada en cualquier contenedor que tenga que
Me encontré con un problema similar, pero en mi local cuando intento que mi Javascript se ejecute mucho antes en la carga de la página principal que causa el mensaje de error. Lo arreglé simplemente esperando que se cargue toda la página y luego llame a la función requerida.
Simplemente puede hacer esto agregando una función de tiempo de espera cuando la página se haya cargado y llame a su evento de carga como:
window.onload = nueva función () {setTimeout (function () {// algún evento de carga}, 10); }
eso asegurará que lo que está intentando se ejecutará bien después de que onLoad se active.
fuente
document.addEventListener("DOMContentLoaded", function () {
desafortunadamente no ayudó.También recibe este mensaje cuando no especifica un targetOrigin en las llamadas a
window.postMessage()
.En este ejemplo, publicamos un mensaje en el primer iFrame y lo usamos
*
como objetivo, lo que debería permitir la comunicación con cualquier targetOrigin.fuente
En mi caso, al menos esto parece ser una condición inofensiva "no lista" que la API vuelve a intentar hasta que tiene éxito.
Obtengo entre dos y nueve de estos (en mi peor de los casos, un FossilBook 2009 con 20 pestañas abiertas a través de un punto de acceso celular) ... pero luego el video funciona correctamente. Una vez que se está ejecutando, mis llamadas basadas en postMessage para seekTo definitivamente funcionan, no he probado otras.
fuente
En algunos casos (como mencionó un comentarista) esto podría ser causado si está moviendo el reproductor dentro de DOM, como
append
o etc.fuente
Puedes probar :
fuente
También estaba enfrentando el mismo problema y luego visito la API oficial de Iframe de YouTube donde encontré esto:
y pasear para ver que la página oficial también enfrenta este problema. Simplemente visite la API oficial de Iframe de Youtube y vea los registros de la consola. Mi versión de Chrome es 79.0.3945.88.
fuente
la mía fue:
Acabo de eliminar la línea con playerVars, y funcionó sin errores en la consola.
fuente