2010-11-23 4 views
1

Ich habe gerade eine Webseite in Safari geöffnet und was habe ich gesehen? Der ganze Text war grün? Aber ich mache nur die Untertitel grün, also sollte der normale Text schwarz sein? Dann dachte ich: Nun, ich habe diese Seite in Firefox programmiert. Zuerst dachte ich, es ist eine schlechte Interpretation von Safari war, aber ich meinen Code wieder überprüft und ich sah dies:CSS, HTML Web Browser ungültige Markup Toleranzen

<h3>Caption<h3> 
<p>BlacktextblacktextBlacktextblacktextBlacktextblacktext</p> 

ich nicht den h3-Tag geschlossen habe.

Also Safari interpretiert meinen Code richtig, und der Firefox duldete diesen Tippfehler? In Firefox funktioniert es so, wie es soll: GRÜNE Beschriftung schwarzer Text; Safari sagt: "Nein, nein! Du hast vergessen, die h3 zu schließen? Nun, jetzt ist alles grün, geh damit um."

Meine Frage ist: Wie tolerant sind die wichtigsten Browser? Was toleriert der Browser (Tippfehler, Invalide usw.)?

Antwort

5

Eigentlich "tolerierten" beide Browser Ihr ungültiges Markup (ungültig, weil Sie zwei nicht geschlossene <h3> Tags hatten), sie taten es einfach auf verschiedene Arten. Gecko (Firefox) entschied, dass die h3 keine p enthalten und beide kurz vor der Eröffnung p geschlossen werden kann. WebKit (Safari, Chrome) hingegen hat sie wahrscheinlich am Ende des Dokumententextes geschlossen.

Alle Browser werden ihr Bestes geben, um sich von der größten Unordnung eines HTML-Dokuments zu erholen. Ihr "Toleranz" -Niveau ist mehr oder weniger gleich, aber die Ergebnisse werden zwischen ihnen variieren. Es ist am besten, sich nicht auf die Browser-Fehlerkorrektur zu verlassen. Verwenden Sie die w3c validator, um sicherzustellen, dass Ihr Code gültig ist, und geben Sie ihm die beste Möglichkeit, in allen Browsern korrekt zu analysieren.

+0

+1 Einfacher zu überprüfen Website mit einem Validator als zu denken, wie tolerant Browser gegen ungültige Markup sind. –

2

Browser hat keine Toleranz für Fehler, aber sie werden ihr Bestes geben, um Code zu korrigieren, der nicht korrekt ist, damit es gerendert werden kann.

Während es wohldefinierte Standards gibt, wie man korrekten Code rendert, gibt es überhaupt keine Standards, wie man falschen Code interpretiert. Jeder Browser kann seinen eigenen Plan verwenden, um das Beste aus der Situation zu machen.

Keiner der Browser kann den Code richtig interpretieren, da der Code selbst nicht richtig ist. Also, keiner der Browser tut etwas falsch, sie machen nur die Dinge anders.

+0

"... es gibt überhaupt keine Standards für die Interpretation von falschem Code". Dies kann streng zutreffend sein, ist aber etwas irreführend. Der HTML5-Entwurf beschreibt im Detail, wie jeder Bytestream verarbeitet und als HTML behandelt wird, so dass die nächste Generation von Browsern alle gebrochenen Markups auf die gleiche Weise reparieren sollte. – Alohci

+0

@Alohci: Das klingt vielversprechend, aber so funktioniert es momentan nicht. Wie auch immer, der Code sollte von Anfang an korrekt sein und sich nicht auf eine Fehlerkorrektur in den Browsern verlassen, um sie korrekt zu machen. Wir alle wissen, dass auch wenn die Fehlerbehandlung in Zukunft standardisiert wird, die tatsächlichen Implementierungen immer noch anders sind ... – Guffa