it-swarm.com.de

Ermitteln Sie, ob der iframe-Inhalt erfolgreich geladen wurde

Ich habe ein Widget, das einen Iframe enthält. Der Benutzer kann die URL dieses Iframes konfigurieren. Wenn die URL jedoch nicht geladen werden konnte (sie ist nicht vorhanden oder der Benutzer hat keinen Internetzugang), sollte der Iframe ein Failover auf eine Standard-Offlineseite durchführen.

Die Frage ist, wie kann ich erkennen, ob der Iframe geladen werden konnte oder nicht? Ich habe versucht, das 'load'-Ereignis zu abonnieren. Wenn dieses Ereignis nach einiger Zeit nicht ausgelöst wird, wird ein Failover durchgeführt. Dies funktioniert jedoch nur in Firefox, da IE und Chrome löst das 'load'-Ereignis aus, wenn die "Seite nicht gefunden" angezeigt wird.

31
Javier Orellana

Heutzutage haben die Browser eine Reihe von Sicherheitsbeschränkungen, die Sie vom Inhalt eines Iframes fernhalten (wenn er nicht zu Ihrer Domain gehört).

Wenn Sie diese Funktionalität wirklich benötigen, müssen Sie eine Serverseite erstellen, die als Proxy fungieren muss, die URL als Parameter empfängt, testet, ob es sich um eine gültige URL handelt, und die Fehlerseite umleitet oder anzeigt.

Ich habe den folgenden Link über Google gefunden: http://wordpressapi.com/2010/01/28/check-iframes-loaded-completely-browser/

Ich weiß nicht, ob das Problem "Seite nicht gefunden" behoben ist.

<script type="javascript">
var iframe = document.createElement("iframe");
iframe.src = "http://www.your_iframe.com/";
if (navigator.userAgent.indexOf("MSIE") > -1 && !window.opera) {
  iframe.onreadystatechange = function(){
    if (iframe.readyState == "complete"){
      alert("Iframe is now loaded.");
    }
  };
} else {
  iframe.onload = function(){
    alert("Iframe is now loaded.");
  };
}
</script>

Ich habe es nicht selbst ausprobiert, also weiß ich nicht, ob es funktioniert. Viel Glück!

14
RobinBrouwer

Wenn Sie den Inhalt des Iframes steuern, kann der Iframe eine Nachricht an das übergeordnete Element senden.

        parent.postMessage('iframeIsDone', '*');

Der übergeordnete Rückruf hört auf die Nachricht.

        var attachFuncEvent = "message";
        var attachFunc = window.addEventListener ;
        if (! window.addEventListener) {
            attachFunc = window.attachEvent;
            attachFuncEvent = "onmessage";
        }

        attachFunc(attachFuncEvent, function(event) {
            if (event.data ==  'iframeIsDone') { // iframe is done callback here
            }
        });
4
Henry

Wie wäre es, wenn Sie prüfen, ob die URL verfügbar ist und erst dann die tatsächliche URL des Iframes festlegen? z.B. mit JQuery

var url = "google.com"
var loading_url = "/empty.html"
document.getElementById("iframe").src = loading_url;
$.ajax({
    url: url,
    type: 'GET',
    complete: function(e, xhr, settings){
         if(e.status === 200){
              document.getElementById("iframe").src = url;
         }
    }
});

Bearbeiten: Dies scheint nicht domänenübergreifend zu funktionieren, der Statuscode ist in diesen Fällen 0.

2
Jens Timmerman

Wenn Sie die Kontrolle über den Inhalt des Iframes haben (z. B. können Sie der Seite einen beliebigen Code hinzufügen), können Sie versuchen, eine spezielle Funktion in jeder dieser Funktionen zu implementieren. Anschließend rufen Sie diese Funktion auf Ihrer Seite auf und stellen einen Fehler fest (über) window.onerrorhandler), wenn die über eval aufgerufene Funktion fehlschlägt, weil die Seite nicht geladen wurde.

Beispielcode: http://www.tek-tips.com/viewthread.cfm?qid=1114265&page=42

0
DVK

Nach dem Auslösen des Onloads können Sie den Inhalt des Iframes durchsuchen, um festzustellen, ob er eine nützliche Seite enthält oder nicht. Sie müssten diesen Browser leider spezifizieren, da alle eine andere Meldung "Seite nicht gefunden" anzeigen.

Weitere Informationen finden Sie hier: http://roneiv.wordpress.com/2008/01/18/get-the-content-of-an-iframe-in-javascript-crossbrowser-solution-for -both-ie-and-firefox /

0
Bitsplitter