Ich hatte das gleiche Problem und fügte hinzu, ich musste überprüfen, ob iframe geladen ist, unabhängig von der domänenübergreifenden Richtlinie. Ich habe eine Chrome-Erweiterung entwickelt, die ein bestimmtes Skript in eine Webseite einfügt und Inhalte von der übergeordneten Seite in einem Iframe anzeigt. Ich habe versucht, dem Ansatz zu folgen, und das hat perfekt für mich funktioniert.
PS: In meinem Fall habe ich die Kontrolle über den Inhalt im Iframe, aber nicht auf der übergeordneten Site. (Iframe wird auf meinem eigenen Server gehostet.)
Erstens:
Erstellen Sie einen data-
Iframe mit einem Attribut wie (dieser Teil war in meinem Fall in einem injizierten Skript).
<iframe id="myiframe" src="http://anyurl.com" data-isloaded="0"></iframe>
Verwenden Sie nun im Iframe-Code:
var sourceURL = document.referrer;
window.parent.postMessage('1',sourceURL);
Nun zurück zum injizierten Skript gemäß meinem Fall:
setTimeout(function(){
var myIframe = document.getElementById('myiframe');
var isLoaded = myIframe.prop('data-isloaded');
if(isLoaded != '1')
{
console.log('iframe failed to load');
} else {
console.log('iframe loaded');
}
},3000);
und,
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
if(event.origin !== 'https://someWebsite.com')
{
console.log('URL issues');
return;
}
else {
var myMsg = event.data;
if(myMsg == '1'){
$("#myiframe").prop('data-isloaded', '1');
}
}
}
Es mag die Frage nicht genau beantworten, aber es ist tatsächlich ein möglicher Fall dieser Frage, den ich mit dieser Methode gelöst habe.