Voici le message d'erreur que je reçois:
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 rencontré d'autres problèmes similaires dans lesquels l'origine de la cible est http://www.youtube.com
et l'origine du destinataire est https://www.youtube.com
, mais pas la mienne où la cible est https://www.youtube.com
et l'origine est http://localhost:9000
.
Je pense que c'est un problème avec l'origine cible étant https
. J'imagine que c'est parce que votre URL iFrame utilise http
au lieu de https
. Essayez de changer l'URL du fichier que vous essayez d'intégrer pour qu'il soit https
.
Par exemple:
var id = getId(url);
return '//www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&Origin=http://localhost:9000';
}
être:
var id = getId(url);
return 'https://www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&Origin=http://localhost:9000';
}
Cela semble résoudre le problème:
this$1.player = new YouTube.Player(this$1.elementId, {
videoId: videoId,
Host: 'https://www.youtube.com',
Ajoutez simplement le paramètre "Origin"
avec l'URL de votre site dans l'attribut paramVars
du lecteur, comme ceci:
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' },
}
Vous pouvez enregistrer dans des fichiers locaux:
Dans le premier fichier, player_api a mis ce code:
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])}}());
En second lieu, trouvez-les comme: this.a.contentWindow.postMessage (a, b [c]);
et passer à:
if(this._skiped){
this.a.contentWindow.postMessage(a,b[c]);
}
this._skiped = true;
Bien sûr, vous pouvez concaténer dans un seul fichier - ce sera plus efficace ..__ Ce n’est pas une solution parfaite, mais ça marche!
Ma source: yt_api-concat
PS: Désolé, l'anglais n'est pas ma première langue.
Essayez d'utiliser window.location.href
pour que l'URL corresponde à l'origine de la fenêtre.
J'ai eu la même erreur. Mon erreur est que le paramètre enablejsapi=1
n'était pas présent dans la iframe
src.
Je pense que la description de l'erreur est trompeuse et concerne à l'origine l'utilisation incorrecte de l'objet player.
J'ai eu le même problème lors du passage à de nouvelles vidéos dans un curseur.
Lorsque vous utilisez simplement la fonction player.destroy()
décrite ici le problème a disparu.
Assurez-vous de charger depuis une URL telle que:
Notez le composant "Origine", ainsi que "enablejsapi = 1". L'origine doit correspondre à votre domaine. Il sera ensuite ajouté à la liste blanche et fonctionnera.
J'ai eu le même problème et il s'est avéré que l'extension Chrome "HTTPS Everywhere" était active. Désactiver l'extension a résolu mon problème.
Supprimer DNS Prefetch résoudra ce problème.
Si vous utilisez WordPress, ajoutez cette ligne dans le functions.php de votre thème.
remove_action( 'wp_head', 'wp_resource_hints', 2 );
Vous pouvez modifier votre iframe pour qu'il soit ainsi et ajouter Origin pour être votre site Web actuel. Cela résout l'erreur sur mon navigateur.
<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>
ref: https://developers.google.com/youtube/iframe_api_reference#Loading_a_Video_Player
Cette erreur exacte était liée à un bloc de contenu créé par Youtube lorsqu’il était "lu sur certains sites ou applications". Plus spécifiquement par WMG (Warner Music Group).
Le message d'erreur indiquait toutefois qu'une importation https iframe vers un site http était le problème, ce qui n'était pas le cas dans ce cas.
Il peut y avoir n'importe lequel des éléments suivants, mais tous mènent dans un DOM non chargé avant son accès par le javascript.
Voici donc ce que vous devez vous assurer avant d'appeler du code JS: * Assurez-vous que le conteneur a été chargé avant de nommer du javascript * Assurez-vous que l'URL cible est chargée dans le conteneur de votre choix
Je suis tombé sur le même problème, mais sur mon local lorsque j'essaie de faire fonctionner mon code javascript bien avant onLoad de la page principale qui provoque le message d'erreur. Je l'ai corrigé en attendant simplement le chargement de la page entière, puis en appelant la fonction requise.
Pour ce faire, vous pouvez simplement ajouter une fonction de délai d’expiration lorsque la page est chargée et appeler votre événement onload comme suit:
window.onload = new function () {setTimeout (function () {// un événement onload}, 10); }
cela garantira que ce que vous essayez exécutera bien après le déclenchement de onLoad.