In den letzten Tagen sind Probleme mit der YouTube-Einbettungs-API aufgetreten. Das Problem besteht darin, dass Sie beim Einbetten eines Videos mit der offiziellen API einfach nicht auf die API zugreifen können. Wenn Sie versuchen, auf die API zuzugreifen, erhalten Sie eine Fehlermeldung auf dem Protokoll (IOS) und wenn Sie versuchen, das Video über die API zu spielen, wird das Video schwarz. Wenn Sie es über die API laden, aber Sie nicht die API verwenden, kann der Benutzer das Video mit Tippen wiedergeben.YouTube-API-Problem bei IOS und Android einbetten
Das Problem bestehen bleiben auf den folgenden Browsern:
IOS 7 Safari auf dem iPad und iPhone IOS 7 Chrome auf iPad und iPhone Android 4 Chrome
(My Play-Taste die API verwendet, um das Video abzuspielen und dass produzieren den Fehler) JSfiddle: http://jsfiddle.net/frdd8nvr/6/
Fehlermeldung:
Unable to post message to https://www.youtube.com. Recipient has origin http://fiddle.jshell.net.
postMessage[native code]:0
Jwww-widgetapi.js:26:357
Nwww-widgetapi.js:25
(anonymous function)[native code]:0
html5player.js:1201:97
Blocked a frame with origin "https://www.youtube.com" from accessing a frame with origin "http://jsfiddle.net". The frame requesting access has a protocol of "https", the frame being accessed has a protocol of "http". Protocols must match.
Einige Debug-Informationen:
Wie ich sehe die API den iframe auf der Website erstellen. Die src ist irgendwann http und irgendwann https.
Mein Test zeigte, dass die meisten der Zeit YouTube-Server einfach LOCATION: https: // ... die Anforderung an die https-URL, aber rund 10% sie die HTTP-Anforderung mit dem richtigen Inhalt serviert.
Ich denke irgendwie das Problem im Zusammenhang mit den erzwungenen https, aber ich war nicht in der Lage, die Lösung herauszufinden. Haben Sie das gleiche erlebt? Haben Sie eine Lösung für dieses Problem? Ist es ein YouTube-Fehler?
Mein Testcode:
<div id="myvideo"></div>
<button id="play-button">Play</button>
JS:
var tag = document.createElement("script");
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName("script")[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
onYouTubeIframeAPIReady = function() {
var vars = {
enablejsapi: 1,
origin: window.location.protocol + "//" + window.location.host,
autoplay: 0,
modestbranding: 1,
wmode: "opaque",
forceSSL: false
};
if (+(navigator.platform.toUpperCase().indexOf('MAC') >= 0 && navigator.userAgent.search("Firefox") > -1)){
vars.html5 = 1;
}
var playerobj = new YT.Player('myvideo', {
videoId: 'ZPy9VCovVME',
wmode: 'opaque',
playerVars: vars,
events: {
onReady: function(){
$('#play-button').on('click', function(){
playerobj.playVideo();
});
//playerobj.playVideo();
},
onStateChange: function(state){
switch(state.data){
case YT.PlayerState.PLAYING:
break;
//case YT.PlayerState.PAUSED:
case YT.PlayerState.ENDED:
break;
}
}
}
});
}
Ich bin nicht sicher, vielleicht verstehe ich nicht etwas, aber Ihr jsfiddle funktioniert gut. Du meinst es ist NUR auf iOS? – mpgn
Es funktioniert nicht auf iOS und Android und bekam den Fehler auf der Konsole, was ich geschrieben habe. Es scheint für mich, es funktioniert nicht, wenn dieser Iframe zu https umgeleitet wird, aber ich bin nicht in der Lage zu finden, wie diese Umleitung zu verhindern ... Vielleicht haben Sie Antwort von anderen Server oder andere Server-Software-Version darauf ausgeführt. Ich denke, es könnte möglich sein, da ich manchmal nicht auf https umgeleitet wurde. –