Fehler beim Laden von Inhalten eines Iframes erkennen
Kann ich erkennen, wenn der Inhalt in einem iframe geladen wurde mit der laden Veranstaltung. Leider für meine Zwecke, es gibt zwei Probleme mit diesem:
- , Wenn es ist ein Fehler beim laden der Seite (404/500, etc), das load-Ereignis wird nie ausgelöst.
- Wenn einige Bilder oder andere Abhängigkeiten konnte nicht geladen werden, load-Ereignis ausgelöst wird, wie üblich.
Gibt es eine Möglichkeit kann ich zuverlässig feststellen, wenn die oben genannten Fehler aufgetreten sind?
Schreibe ich eine halb-web semi-desktop-Anwendung auf Basis von Mozilla/XULRunner, also Lösungen, die nur in Mozilla arbeiten, sind willkommen.
InformationsquelleAutor der Frage Daniel Cassidy | 2008-12-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie haben die Kontrolle über die iframe-Seite (und Seiten auf der gleichen domain-Namen), eine Strategie könnte wie folgt Aussehen:
var iFrameLoaded = false;
true
anrufen aus dem iframe-Dokument eines Elternteils Funktion(setIFrameLoaded();
zum Beispiel).iFrameLoaded
flag mit dertimer
Objekt (setzen Sie den timer, um Ihre bevorzugte timeout-limit erreicht) - wenn die fahne ist noch falscher kann man sagen, dass der iframe wurde nicht regelmäßig geladen.Ich hoffe, das hilft.
InformationsquelleAutor der Antwort splattne
Ich hatte dieses problem vor kurzem und musste greifen, um die Einrichtung eines Javascript-Polling-Aktion auf der Übergeordneten Seite (enthält den IFRAME-tag). Diese JavaScript-Funktion prüft den IFRAME-Inhalt für die explizite Elemente existieren nur in einer GUTEN Reaktion. Dieser meint natürlich, dass Sie nicht haben, um mit Verletzung der "same-origin-policy."
Statt Kontrolle für alle möglichen Fehler, die generiert werden könnten, von den vielen verschiedenen Netzwerk-Ressourcen.. ich habe einfach überprüft, für die eine Konstante positive Element(E), ich weiß, sollte eine gute Antwort.
Nachdem eine vorbestimmte Zeit und/oder Anzahl der Fehlversuche zu erkennen, die voraussichtlich Element(s), das JavaScript ändert die IFRAME-SRC-Attribut (auf Wunsch von meinem Servlet) eine Benutzerfreundliche Fehlerseite im Gegensatz zur Darstellung der typischen HTTP-FEHLERMELDUNG. Das JavaScript könnte auch genauso leicht ändern Sie das SRC-Attribut, um eine ganz andere Anfrage.
}
InformationsquelleAutor der Antwort Chris
Ich denke, dass das pageshow-event ausgelöst wird, für Fehler-Seiten. Oder, wenn Sie dies tun, aus Chrom, dann wird Ihre überprüfen Sie Ihre Fortschritte Hörer das verlangen zu sehen, ob es eine HTTP-channel, in dem Fall können Sie abrufen, den status-code.
Als für die Seite Abhängigkeiten, ich denke, Sie können dies nur tun, von chrome, indem Sie hinzufügen einer Aufnahme onerror-Ereignis-listener, und selbst dann wird es nur Fehler zu finden, auf die Elemente, nicht die CSS-Hintergründe oder andere Bilder.
InformationsquelleAutor der Antwort Neil
Haben eine id für die meisten top - (Körper) - element auf der Seite, die geladen wird, in deinem iframe.
auf der Load-handler für das iframe, um zu sehen, wenn getElementById() gibt einen nicht-null-Wert.
Wenn es ist, iframe erfolgreich geladen wurde. sonst hat Sie es versäumt.
in diesem Fall, legen den Rahmen.src="about:blank". Stellen Sie sicher, entfernen Sie die loadhandler vor, das zu tun.
InformationsquelleAutor der Antwort Kasturi
Nicht beantworten Ihre Frage so genau, aber meine Suche nach einer Antwort hat mich hierher gebracht, so bin ich Entsendung nur für den Fall, jemand anderes hatte eine ähnliche Anfrage an mich.
Es nicht ganz verwenden ein load-Ereignis, aber es kann erkennen, ob eine website ist erreichbar und aufrufbar (wenn es ist, dann wird der iFrame, in der Theorie, sollte geladen werden).
Zuerst dachte ich, dass dies eine AJAX-Aufruf wie jeder andere auch, außer, dass es nicht funktioniert für mich zunächst, als ich verwendet hatte, jQuery. Es funktioniert perfekt, wenn Sie ein XMLHttpRequest:
Edit:
Also diese Methode funktioniert ok, außer, dass es hat eine Menge von false negative (nimmt eine Menge Sachen, die die Anzeige in einem iframe) wegen der cross-origin-malarky. Die Art und Weise, die ich bekam, um dies zu tun, eine CURL - /Web-Anfrage auf einem server, und überprüfen Sie dann den Antwort Header für a) wenn die website existiert, und b) wenn der Header gesetzt hatte
x-frame-options
.Dies ist nicht ein problem, wenn Sie Ihren eigenen webserver, so können Sie Ihre eigenen api-Aufruf.
Meine Implementierung in node.js:
InformationsquelleAutor der Antwort lels