Jul 18

Erfahrungsbericht: Probleme mit standardkonformen XHTML

Tag: AllgemeinesPatrick @ 10:22 am

Bei meinem täglichen Umgang mit Web-Programmierung bin in letzter Zeit in Bezug auf 100 Prozent standkonformes XHTML(1.1) auf 2 Bugs gestoßen, die mich sehr nervten. Der erstere betrifft den Internet Explorer und ist eher harmlos, der zweite ist allgemeiner Natur.

Wie angesprochen, behandle ich den IE-Fehler zuerst.

In meinen eigenen Projekten bevorzuge ich es, den XHTML-Standard nach Version 1.1 – also sehr strikt – einzuhalten. Meine üblichen Header beginnen dementsprechend wie folgt:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

Jedoch genügt dies nicht, um den Validatortest des W3C zu bestehen, da hierfür auch der korrekte Datei-Header mitgeschickt werden muss. Dies sollte ja in PHP kein Problem sein.

Wie so üblich, war es dann doch nicht so einfach, da Microsofts Internet Explorer mit der Anweisung „Content-Type: application/xhtml+xml“ überhaupt nichts anzufangen weiß und idiotischer Weise die Seite zum Download anbietet.

Um Abhilfe zu schaffen, baute ich eine einfache IE-Browserweiche in meinen PHP-Code ein. Alle Webbrowser, bis auf den aus Redmond, bekommen den korrekten Datei-Header zugesandt.

$browser = get_browser( null, true );
if ( $browser['browser'] != "IE" ) {
header("Content-Type: application/xhtml+xml; charset=ISO-8859-1");
}

Das zweite Problem ist, wie bereits im Vorwort erwähnt, allgemeiner und betrifft die XHTML-Definition selbst. Diese sieht vor, dass beispielsweise kein document.write in XHTML gibt.

Bisher störte dies mich nur wenig. Jedoch kam ich die Tage mit einem Scipt in Berührung, das durch den massiven Gebrauch von document.write Emailadressen für Mailbots unzugänglich bzw. unlesbar macht.

Anschließend schrieb ich an einer eigenen document.write-Funktion, die jedoch 100% DOM-kompartibel sein sollte. Hierzu erwies sich das innerDOM-Script von Simon Kühn als sehr nützlich, da es einen (validierten) XHTML-String in ein DOM-Objekt konvertiert. Dieses Objekt lässt sich dann leicht an einer beliebigen Stelle im bestehende Dokument einfügen.

Die letzte Hürde bestand darin, die richtige, also „letzte“, Position im Dokument zu finden, so dass meine Funktion write ähnelt. Dazu nutzte ich in einer rekursiven Schleife die lastChild-Methode. Da Firefox und IE in Bezug Textknoten unterschiedlich behandeln, musste noch eine Fallunterscheidung eingebaut werden.

Die komplett Funktion lautet nun wie folgt:

function writeDom ( string ) {
var path = document;
while ( path.lastChild ) {
if ( path.lastChild.nodeType === 1 ) {
path = path.lastChild;
} else break;
}
path.parentNode.insertBefore( stringToDOM( string ), path );
}
document.writeDom=writeDom;

Der Aufruf geschieht ganz einfach über document.writeDom( String ).

Im Dokumentkopf muss das innerDOM-Script eingebunden sein!

3 Antworten zu “Erfahrungsbericht: Probleme mit standardkonformen XHTML”

  1. Patrick sagt:

    Welchen konkreten Vorteil hat XHTML 1.1 gegenueber HTML 4.1 strict?

    Greetings

  2. Patrick sagt:

    Ich kann dir leider keine konkrete Auflistung über die Vor- und Nachteile geben. Ich denke, wer mit HTML 4.1 strict arbeitet, der ist auf dem richtigen Weg.
    Mir persönlich gefällt an XHTML der klare, durchstrukturierte und xml-basierte Aufbau. Ich bin der Meinung, dass dieser Standard in Zukunft durch die neuen Möglichkeiten das Internet zu erleben – wie das iPhone – mehr an Bedeutung gewinnen wird.

    Hast du bereits Erfahrungen mit beiden Versionen gesammelt?

  3. Patrick sagt:

    An sich kann man HTML 4.1 ja auch so aufbauen wie XHTML, der Vorteil daran ist meiner Meinung nach, dass man gerade bei multimedialen Inhalten (Videos, Flash) keine „Hacks“ (meistens JavaScript) braucht, um diese einzubinden.

    Ein Beispiel ist da z.B. YouTube-Videos. Den embed-Code, den man von YouTube bekommt ist alles andere als valide, aber funktioniert eigentlich prima in jedem Browser.

    Ganz gleich ob man jetzt HTML oder XHTML benutzt, man sollte das Markup (HTML/XHTML), Desgin (CSS) und Behaviour (JavaScript) immer voneinander trennen.

    Ein weiterer Punkt, der vielleicht auch fuer HTML spricht, ist die Tatsache, dass XHTML 2.0 eigentlich nicht mehr wirklich im Gespraech ist und das W3C gerade dabei ist HTML 5 zu entwickeln.

    Greetings

Hinterlasse einen Kommentar

You must be logged in to post a comment.