Miałem ten sam problem i dodałem do tego, musiałem sprawdzić, czy ramka iframe jest ładowana niezależnie od zasad międzydomenowych. Pracowałem nad rozszerzeniem do Chrome, które wstawia pewien skrypt na stronę internetową i wyświetla część treści ze strony nadrzędnej w ramce iframe. Próbowałem zastosować podejście i to zadziałało idealnie dla mnie.
PS: W moim przypadku mam kontrolę nad zawartością elementu iframe, ale nie w witrynie nadrzędnej. (Element iframe jest hostowany na moim własnym serwerze)
Po pierwsze:
Utwórz element iframe z data-
atrybutem w nim takim jak (ta część była w skrypcie wstrzykniętym w moim przypadku)
<iframe id="myiframe" src="http://anyurl.com" data-isloaded="0"></iframe>
Teraz w kodzie iframe użyj:
var sourceURL = document.referrer;
window.parent.postMessage('1',sourceURL);
Wróćmy teraz do wstrzykniętego skryptu, jak w moim przypadku:
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);
i,
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');
}
}
}
Może nie do końca odpowiada na to pytanie, ale rzeczywiście jest to możliwy przypadek tego pytania, które rozwiązałem tą metodą.