Voici le message d'erreur que j'obtiens:
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').
J'ai vu d'autres problèmes similaires concernant l'origine de la cible http://www.youtube.com
et l'origine du destinataire https://www.youtube.com
, mais aucun ne ressemble au mien où se trouve la cible https://www.youtube.com
et l'origine http://localhost:9000
.
- Je ne comprends pas le problème. Quel est le problème?
- Comment puis-je y remédier?
javascript
angularjs
youtube
youtube-api
youtube-iframe-api
Adam Zerner
la source
la source
Réponses:
Je crois que c'est un problème avec l'origine de la cible
https
. Je soupçonne que c'est parce que votre URL iFrame utilise à lahttp
place dehttps
. Essayez de changer l'URL du fichier que vous essayez d'intégrerhttps
.Par exemple:
être:
la source
http
vs.https
? Peu importe que les domaines diffèrent (youtube vs localhost)? Et quelle est exactement l'origine de la cible par rapport à l'origine du destinataire? Comment ce que vous avez dit a-t-il changé l'origine du destinataire (mon URL est toujours localhost: 9000)?localhost:9000
. Le problème venait en fait de la façon dont vous utilisiez l'api youtube. Lorsque vous déclarez l'API commetag.src = "https://www.youtube.com/iframe_api";
dans votre code, vous indiquez à YouTube que vous souhaitez utiliser ssl. Ainsi, le changement que j'ai suggéré vous a amené à utiliser SSL pour demander les vidéos. L'erreur disait simplement que vous mélangiez des appels ssl et non ssl.playerEl = document.querySelector('iframe#ytplayer'); anotherEl.appendChild(playerEl); // yt complains on subsequent api calls
Ajoutez simplement le paramètre
"origin"
avec l'URL de votre site dans l'paramVars
attribut du player, comme ceci:la source
window.location.origin
..window.location
est un objet.window.location.host
Ce réglage semble résoudre le problème:
la source
http
(au lieu dehttps
) a résolu mon problème.host: `${window.location.protocol}//www.youtube.com`
,Vous pouvez enregistrer le JavaScript dans des fichiers locaux:
Dans le premier fichier,
player_api
mettez ce code:Dans le deuxième fichier, recherchez le code:
this.a.contentWindow.postMessage(a,b[c]);
et remplacez-le par:
Bien sûr, vous pouvez concaténer en un seul fichier - ce sera plus efficace. Ce n'est pas une solution parfaite, mais ça marche!
Ma source: yt_api-concat
la source
Assurez-vous que vous chargez à partir d'une URL telle que:
https://www.youtube.com/embed/HIbAz29L-FA?modestbranding=1&playsinline=0&showinfo=0&enablejsapi=1&origin=https%3A%2F%2Fintercoin.org&widgetid=1
Notez le composant "origin", ainsi que "enablejsapi = 1". L'origine doit correspondre à votre domaine, puis elle sera ajoutée à la liste blanche et fonctionnera.
la source
Essayez d'utiliser
window.location.href
pour que l'URL corresponde à l'origine de la fenêtre.la source
J'ai eu la même erreur. Mon erreur était que le
enablejsapi=1
paramètre n'était pas présent dans leiframe
src.la source
Je pense que la description de l'erreur est trompeuse et a à l'origine à voir avec une mauvaise utilisation de l'objet joueur.
J'ai eu le même problème lors du passage à de nouvelles vidéos dans un curseur.
En utilisant simplement la
player.destroy()
fonction décrite ici, le problème est résolu.la source
J'ai eu ce même problème et il s'avère que c'était parce que j'avais l'extension Chrome "HTTPS Everywhere" en cours d'exécution. La désactivation de l'extension a résolu mon problème.
la source
Cette erreur exacte était liée à un blocage de contenu par Youtube lors de la «lecture sur certains sites ou applications». Plus précisément par WMG (Warner Music Group).
Le message d'erreur suggérait cependant qu'une importation iframe https vers un site http était le problème, ce qui n'était pas le cas dans ce cas.
la source
Supprimer DNS Prefetch résoudra ce problème.
Si vous utilisez WordPress, ajoutez cette ligne dans le functions.php de votre thème
la source
Vous pouvez changer votre iframe pour qu'il ressemble à ceci et ajouter l'origine à votre site Web actuel. Il résout une erreur sur mon navigateur.
réf: https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player
la source
Il pourrait y avoir l'un des éléments suivants, mais tous mènent à DOM non chargé avant son accès par le javascript.
Voici donc ce que vous devez vous assurer avant d'appeler le code JS: * Assurez-vous que le conteneur a été chargé avant tout appel javascript * Assurez-vous que l'URL cible est chargée dans le conteneur qu'elle doit
Je suis tombé sur le même problème, mais sur mon site local lorsque j'essaie de faire fonctionner mon Javascript bien avant le chargement de la page principale qui provoque le message d'erreur. Je l'ai corrigé en attendant simplement que la page entière se charge, puis en appelant la fonction requise.
Vous pouvez simplement le faire en ajoutant une fonction de délai d'expiration lorsque la page est chargée et en appelant votre événement onload comme:
window.onload = new function () {setTimeout (function () {// un événement onload}, 10); }
Cela garantira que ce que vous essayez s'exécutera bien après le déclenchement de onLoad.
la source
document.addEventListener("DOMContentLoaded", function () {
n'a malheureusement pas aidé.Vous obtenez également ce message lorsque vous ne spécifiez pas de targetOrigin dans les appels à
window.postMessage()
.Dans cet exemple, nous publions un message sur le premier iFrame et l'utilisons
*
comme cible, ce qui devrait permettre la communication avec n'importe quel targetOrigin.la source
Dans mon cas au moins, cela semble être une condition inoffensive "pas prêt" que l'API réessaye jusqu'à ce qu'elle réussisse.
J'obtiens entre deux et neuf d'entre eux (sur mon pire testeur, un FossilBook 2009 avec 20 onglets ouverts via un hotspot cellulaire) .... mais alors la vidéo fonctionne correctement. Une fois qu'il exécute mes appels basés sur postMessage pour seekTo définitivement, je n'en ai pas testé d'autres.
la source
Dans certains cas (comme un commentateur l'a mentionné), cela peut être dû si vous déplacez le lecteur dans DOM, comme
append
ou etc.la source
Tu peux essayer :
la source
J'étais également confronté au même problème, puis je visite l' API Iframe officielle de Youtube où j'ai trouvé ceci:
et errer pour voir que la page officielle était également confrontée à ce problème. Visitez simplement l' API Iframe officielle de Youtube et consultez les journaux de la console. Ma version Chrome est 79.0.3945.88.
la source
Le mien était:
Je viens de supprimer la ligne avec playerVars, et cela a fonctionné sans erreur sur la console.
la source