it-swarm.com.de

Ausführung von "postMessage" auf "DOMWindow" fehlgeschlagen: https://www.youtube.com! == http: // localhost: 9000

Dies ist die Fehlermeldung, die ich erhalte:

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').

Ich habe andere ähnliche Probleme gesehen, bei denen der Zielursprung http://www.youtube.com und der Empfängerursprung https://www.youtube.com ist, aber keines wie meines, bei dem das Ziel https://www.youtube.com ist und der Ursprung http://localhost:9000 ist.

  1. Ich verstehe das Problem nicht. Worin besteht das Problem?
  2. Wie kann ich es reparieren?
111
Adam Zerner

Ich glaube, dies ist ein Problem, bei dem das Ziel Origin https ist. Ich vermute, es liegt daran, dass Ihre iFrame-URL http anstelle von https verwendet. Ändern Sie die URL der Datei, die Sie einbetten möchten, in https.

Zum Beispiel:

var id = getId(url);
  return '//www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&Origin=http://localhost:9000';
}

sein:

var id = getId(url);
  return 'https://www.youtube.com/embed/' + id + '?showinfo=0&enablejsapi=1&Origin=http://localhost:9000';
}
73
Chris Franklin

Das Festlegen scheint das zu beheben:

  this$1.player = new YouTube.Player(this$1.elementId, {
    videoId: videoId,
    Host: 'https://www.youtube.com',
10
M.Ali El-Sayed

Fügen Sie einfach den Parameter "Origin" mit der URL Ihrer Site im paramVars-Attribut des Players hinzu, wie folgt:

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' },
}
7
Flávio

Sie können in lokalen Dateien speichern:

In die erste Datei hat player_api diesen Code eingefügt:

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])}}());

In der Sekunde finden Sie einige wie: this.a.contentWindow.postMessage (a, b [c]); 

und wechseln zu:

if(this._skiped){
    this.a.contentWindow.postMessage(a,b[c]); 
}
this._skiped = true;

Natürlich können Sie in einer Datei verketten - dies wird effizienter. Dies ist keine perfekte Lösung, aber es funktioniert!

Meine Quelle: yt_api-concat

PS: Sorry, Englisch ist nicht meine erste Sprache.

3
Artur

Verwenden Sie window.location.href für die URL, um den Ursprung des Fensters anzupassen.

2
Chaitanya Shah

Ich habe den gleichen Fehler bekommen. Mein Fehler war, dass der Parameter enablejsapi=1 in der Variable iframe nicht vorhanden war.

1
ave

Ich denke, die Beschreibung des Fehlers ist irreführend und hat ursprünglich mit der falschen Verwendung des Player-Objekts zu tun.

Ich hatte das gleiche Problem, als ich zu neuen Videos in einem Slider wechselte.

Wenn Sie einfach die player.destroy()-Funktion hier beschrieben verwenden, ist das Problem behoben.

0
denns

Stellen Sie sicher, dass Sie von einer URL laden, wie zum Beispiel:

https://www.youtube.com/embed/HIbAz29L-FA?modestbranding=1&playsinline=0&showinfo=0&enablejsapi=1&Origin=https%3A%2Fintercoin.org&widgetid=1

Beachten Sie die "Origin" -Komponente sowie "enablejsapi = 1". Origin muss mit dem übereinstimmen, was Ihre Domain ist, und dann wird es auf die Whitelist gesetzt und funktioniert.

0

Ich hatte das gleiche Problem und es stellte sich heraus, dass ich die Chrome-Erweiterung "HTTPS Everywhere" hatte. Das Deaktivieren der Erweiterung hat mein Problem gelöst.

0
Gavin

Durch das Entfernen von DNS-Prefetch wird dieses Problem behoben.

Wenn Sie WordPress verwenden, fügen Sie diese Zeile in die functions.php Ihres Themes ein

remove_action( 'wp_head', 'wp_resource_hints', 2 );
0
Terry Lin

Sie könnten Ihren iframe so ändern und Origin als aktuelle Website hinzufügen. Es löst Fehler in meinem Browser.

<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

Dieser genaue Fehler war auf einen Inhaltsblock von Youtube zurückzuführen, der "auf bestimmten Websites oder Anwendungen wiedergegeben wurde". Genauer gesagt von WMG (Warner Music Group).

Die Fehlermeldung ergab jedoch, dass ein https-Iframe-Import auf eine http-Site das Problem war, was in diesem Fall nicht der Fall war.

0
TomSjogren

Es könnte eine der folgenden Möglichkeiten geben, aber alle führen in das DOM, das nicht geladen wurde, bevor das Javascript darauf zugreift.

Bevor Sie JS-Code aufrufen, müssen Sie also Folgendes sicherstellen: * Stellen Sie sicher, dass der Container geladen wurde, bevor JavaScript aufgerufen wird. * Stellen Sie sicher, dass die Ziel-URL in dem Container geladen ist, in dem sich der Container befindet

Ich bin auf ein ähnliches Problem gestoßen, aber auf mein lokales, als ich versuchte, mein Javascript vor onLoad der Hauptseite laufen zu lassen, was die Fehlermeldung verursacht. Ich habe es behoben, indem ich einfach darauf gewartet habe, dass die ganze Seite geladen wird, und dann die gewünschte Funktion aufgerufen habe.

Sie können dies einfach tun, indem Sie eine Timeout-Funktion hinzufügen, wenn die Seite geladen wurde, und Ihr Onload-Ereignis wie folgt aufrufen:

window.onload = new function () {setTimeout (function () {// irgendein Onload-Ereignis}, 10); }

dadurch wird sichergestellt, dass das, was Sie versuchen, auch nach dem Auslösen von onLoad ausgeführt wird.

0
KMX