Frage

Wenn ich einen Auszeichnungsfehler in meiner XHTML-Seite habe, Mozilla Firefox zeigt die „Yellow Screen of Death“, nur eine große rote Fehlermeldung auf einem gelben Hintergrund.

Während diese Fehler sind selten, sie sind extrem benutzerunfreundlich.

Gibt es eine Weise, die ich diese mit Javascript erkennen kann und dadurch eine Nachricht zurück an den Server senden?

Was ich bisher entdeckt:  - Scripts vor dem Parsing-Fehler platziert noch laufen. (Na sicher.)  - Timeouts und Intervalle, die in diesen Skripten gesetzt wurden ausführen wird noch nach dem Parsing-Fehler.  - In Firefox ist das DOM ein <parsererror> mit einem <sourcetext> in seinem Innern. Das kann ich erkennen, ob ich document.firstChild.tagName abfragen.

Verbleibende Fragen:  - Welche Events stehen zur Verfügung, die ich könnte hören dies zu erkennen? (Polling ansaugt.)  - Wie kann ich erkennen, diese in anderen Browsern

?
War es hilfreich?

Lösung

Fangen Parse-Fehler auf dem Client möglich sein könnte, aber es ist wirklich das falsche Problem zu lösen.

Ich weiß, das ist nicht das, was Sie gefragt, aber wenn man etwas wirklich XHTML-spezifische wie die Einbettung eine andere Markup-Sprache tun, sollten Sie Ihre Seite als text / html dienen statt application / xhtml + xml. Auch wenn es XHTML ist. Indem er sie als Text dient / html Sie das Problem vermeiden, werden Sie in laufen und lassen Sie Ihre Seite auch in IE arbeiten. Beachten Sie, dass es den MIME-Typ und nicht der Doctype Deklaration ist, die bestimmt, welche Parser verwendet wird -. Eine Übergangs Doctype verwenden wird es nicht tun

Das heißt, wenn Sie wirklich sicher, dass Sie Ihre Seite als XHTML analysiert wollen, ist es besser, diese Art von Fehlern auf dem Server zu handhaben. Generieren Sie Ihre Seite ein DOM durch den Aufbau und senden dann das Ergebnis es von Serialisierung. Wenn das keine Option ist, starten Sie dann durch die Seite zu erzeugen, wie Sie jetzt tun, aber sie übertragen sie nicht an den Client noch. Nehmen Sie die XHTML, die Sie generiert haben und analysiert es Server-Seite mit einem Validieren XHTML-Parser (oder zumindest ein generischer XML-Parser). Wenn Sie Fehlermeldungen erhalten, zeigen, was Fehlerseite Sie wollen. Andernfalls wird die geparste DOM serialisiert und an den Client senden.

Insgesamt sind die Grundregeln für die Verwendung von application / xhtml + xml sind:

  1. Sie nicht.
  2. (Für erfahrene Anwender) Sie nicht, es sei denn, Sie haben bewiesen, dass Sie etwas tun, die nicht funktionieren, wenn die Seite als text / html serviert wird. Dies gilt für einen kleinen, kleinen Bruchteil eines Prozents von XHTML-Dokumenten.
  3. Wenn Sie Ihre Seite als application / xhtml + xml dienen müssen, erzeugen sie mit einer gewissen Methode, die Gültigkeit garantiert.
  4. Wenn Sie wirklich wissen, was Sie tun, nie Verwendung application / xhtml + xml für eine Seite, die Benutzereingaben enthält.

Beachten Sie, dass XHTML ist nur eine Neuformulierung von HTML 4 sowie die Möglichkeit, andere Sprachen zu integrieren. Wenn Sie nicht die Einbettung verwenden, was Sie haben, ist HTML 4 mit einer anderen, aber fast vollständig kompatibel Syntax. Die überwältigende Mehrheit der XHTML-Dokumente gibt, werden als text / html serviert und so wie HTML 4 von Browsern behandelt.

Andere Tipps

Das ist Ihre Frage nicht beantworten, sondern stattdessen, warum nicht Ihre XHTML auf Ihrem Server validieren, nach /, wenn Sie es generieren und bevor Sie es an den Browser senden?

Meine erste Frage wäre: Da Internet Explorer ist nicht leicht, damit tatsächlich application / xhtml + xml als MIME-Typ angeben, noch unterstützen sie alle, die gut, warum Sie XHTML tun müssen, um Fehler erkennen analysieren

Wie für die Aufdeckung von Fehlern - haben einen Blick auf http://www.quirksmode.org

Ich würde empfehlen, das Dokument auf der Serverseite zu validieren. Aber wenn Sie es wirklich auf der Client-Seite tun wollen, es ist nichts falsch mit Polling wenn es richtig gemacht (was bedeutet, dass die Umfrage garantiert beenden).

Die folgende sollte Arbeit in mindestens Firefox und Opera:

(function() {
    if(document.documentElement &&
        document.documentElement.getAttribute('xmlns') !==
        'http://www.w3.org/1999/xhtml') {
        alert('parsing errors');
    }
    else if(document.body && document.body.lastChild) {
        alert('no parsing errors');
    }
    else setTimeout(arguments.callee, 100);
})();

Ich weiß, es ist wahrscheinlich nicht die hilfreiche Antwort, aber haben Sie eine Übergangs Doctype betrachtet zu wechseln?

Mit allen Mitteln, Ihre Dateien über einen Parser setzen, Fehler zu erkennen, aber nicht offline es - das Risiko Benutzer die YSOD zeigen ist es nicht wert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top