2015-10-12 8 views
5

Ich habe das Laden-Symbol ausgeblendet, als meine Datei in iframe heruntergeladen wurde. Es funktionierte gut in Internet Explorer. In Chrome konnte ich nicht warten, bis die Datei in der iframe geladen wird.Onreadestate kann nicht ersetzt werden

Jede Hilfe wird geschätzt.

function checkIframeLoaded() { 
    var iFrameObject = document.getElementById("iframehidden"); 
    var iframeDoc = iFrameObject.contentDocument || iFrameObject.contentWindow.document; 
    if (iframeDoc.readyState == 'complete' || iframeDoc.readyState == "interactive" || iframeDoc.readyState == "loaded") { 
     if (top.document.getElementById("tblPleaseWait") != null) { 
      top.document.getElementById("tblPleaseWait").style.display = "none"; 
     } 
     else if (document.getElementById("tblPleaseWait") != null) { 
      document.getElementById("tblPleaseWait").style.display = "none"; 
     } 
     return; 
    } 
} 

function setupLoader(objIFrame, brestorepane) { 
    if (objIFrame.attachEvent) { 
     if (brestorepane) { 
      objIFrame.attachEvent('onreadystatechange', checkIframeLoaded); 
     } 

    } else { 
     if (brestorepane) { 
      objIFrame.addEventListener('load', checkIframeLoaded()); 
     } 
    } 
} 

Antwort

2

Sie richten den Handler in Nicht-IE-Browsern falsch ein.

Zuerst gibt es einen Tippfehler. addEventListner sollte addEventListener sein. Ihr JavaScript console könnte dies erwähnt haben.

Danach sind Sie AufrufcheckIframeLoaded() sofort, anstatt es als Handler verweisen.

Versuchen:

objIFrame.addEventListener('load', checkIframeLoaded); 
+0

ja seine Tippfehler, aber Last ist nicht zu helfen, zu warten, bis objIFrame –

+0

nach dem Fixieren beider Probleme So geladen wird, bleibt das Problem? Sie sollten die Frage mit dem aktualisierten Code bearbeiten, sonst erhalten Sie weitere Antworten, in denen Sie lediglich diese beiden Probleme beheben. –

+0

Beachten Sie, dass nur der 'addEventListener'-Tippfehler behoben wurde; Sie rufen immer noch 'checkIframeLoaded()', wenn Sie nicht wollen. Ich bin immer noch neugierig, was passiert, wenn Sie die Klammern entfernen, wie in meiner Antwort. –

0

Wenn die iframe src Punkte zum Inhalt auf Ihrer eigenen Website und Sie haben richtig eingestellt allow-same-origin dann können Sie diese Methode verwenden (Sie getaggt Frage mit jQuery, so dass diese Lösung verwendet jQuery, aber reine JS alternative ist möglich, wie auch)

function checkIframeLoaded() { 
 
    if (top.document.getElementById("tblPleaseWait") != null) { 
 
    top.document.getElementById("tblPleaseWait").style.display = "none"; 
 
    } else if (document.getElementById("tblPleaseWait") != null) { 
 
    document.getElementById("tblPleaseWait").style.display = "none"; 
 
    } 
 
} 
 
$("#iframehidden").on("load", checkIframeLoaded);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='tblPleaseWait'>PLEASE WAIT</div> 
 
<iframe id='iframehidden' name='iframehidden' src='http://stacksnippets.net' style='border:2px solid #ccc;'></iframe>

Eine andere Möglichkeit, dies zu tun ist, den Code in das iframe Dokument setzen sich (wie iframe.html):

$(window).on("load", function() 
{ 
    var plsWait = top.document.getElementById("tblPleaseWait"); 
    if(plsWait) plsWait.style.display = "none"; 
}); 

Wenn die iframe src auf jemand anderen Seite ist - dann sind Sie in Schwierigkeiten. Es sei denn, der Remote-Inhalt wurde so eingestellt, dass Cross-Site-Scripting zulässig ist.

Auch, wie Paul Roub wies darauf hin, Sie haben einen Fehler hier:

objIFrame.addEventListener('load', checkIframeLoaded());

Sie sind eigentlich nicht die checkIframeLoaded Funktion zum load Ereignis zu delegieren; Sie führen diese Funktion mit der Klammer () aus und delegieren stattdessen ihr Ergebnis, das undefined ist.

Entfernen Sie einfach die Klammer um die gewünschte Wirkung zu erzielen, die die checkIframeLoaded aufgerufen wird, wenn das load Ereignis ausgelöst wird:

objIFrame.addEventListener('load', checkIframeLoaded);

Danach müssen Sie nur über innerhalb der Grenzen von Scripting arbeiten Rahmen.

-1

function checkIframeLoaded() { 
 
    if (top.document.getElementById("tblPleaseWait") != null) { 
 
    top.document.getElementById("tblPleaseWait").style.display = "none"; 
 
    } else if (document.getElementById("tblPleaseWait") != null) { 
 
    document.getElementById("tblPleaseWait").style.display = "none"; 
 
    } 
 
} 
 
$("#iframehidden").on("load", checkIframeLoaded);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id='tblPleaseWait'>PLEASE WAIT</div> 
 
<iframe id='iframehidden' name='iframehidden' src='http://stacksnippets.net' style='border:2px solid #ccc;'></iframe>

Verwandte Themen