Firebug, „syntax error“ und DOCTYPE

Heute sind wir über ein interessantes Phänomen bei einem CodeCharge-Projekt gestolpert: bei bestimmten Seiten hatte der Firebug einen „syntax error“ in Zeile 1 festgestellt und die erste Zeile des HTML-Codes zitiert: „<!DOCTYPE (…)“. Nachfolgende JavaScript-Aufrufe gaben teilweise weitere Fehler aus, teilweise aber auch nicht.

Damit konnten wir zunächst gar nichts anfangen. Eine Suche bei Google ergab nicht viel, ausser dass vereinzelt Leute auch solche Probleme meldeten, aber meistens keine sinnvolle Lösung präsentieren konnten. Unter anderem wurde darauf hingewiesen, dass dieser Fehler vorkommt, sobald man ein script-Tag im Code stehen hat, welches ein leeres src-Attribut besitzt.
Bei uns gab es aber keine leeren src-Attribute – die Lösung war aber gar nicht so weit davon entfernt. In diesem speziellen Fall haben wir wegen der URL-Lesbarkeit diverse mod_rewrite-Regeln in unserem Projekt, die dummerweise mit den (leider nicht absoluten) Pfadangaben der CodeCharge-JavaScript-Dateien kollidierten. Erschwert hat die Fehlersuche, dass durch die mod_rewrite-Regeln die Script-Datei zufälligerweise auf die jeweilige aufrufende(!) HTML- bzw PHP-Seite umgeleitet wurde. Wenn man also im Firebug die Fehlerzeile anzeigen wollte, bekam man genau den HTML-Code der aufgerufenen Webseite. Wenn wir aufmerksamer gewesen wären, hätten wir merken müssen, dass eigentlich die erste Zeile der jeweiligen JavaScript-Datei als Fehler genannt wurde…

Zusammengefasst: Das Problem lag daran, dass die externen JavaScript-Dateien nicht geladen werden konnten, stattdessen wurden HTML-Seiten durch ungünstig gewählte mod_rewrite-Regeln geladen, die natürlich einen „syntax error“ erzeugten.
Das steht dem Fehlverhalten bei leerem src-Attribut in script-Tags nicht entgegen, denn der Webserver gibt normalerweise eine Standard-Seite (z.B. index.html) zurück, wenn nur ein Verzeichnis aufgerufen wird (bei leerem src-Attribut wird von Webserver automatisch der komplette Pfad der Basis-Seite ohne Dateiname verwendet), oder eben, falls nicht vorhanden, eine Fehler-Seite, die meistens HTML-Code beinhalten und eben nicht JavaScript.

Die Lösung: Man muss nur dafür sorgen, dass alle eingebundenen JavaScript-Dateien auch tatsächlich geladen werden, bzw auch den Inhalt haben, der tatsächlich gebraucht wird.
Bei uns hiess das, die mod_rewrite-Regeln soweit anpassen, dass solche Script-Dateien nicht umgeleitet werden. CodeCharge-seitig wäre das zu aufwendig geworden, denn es handelte sich hier um HTML-Code der von CodeCharge generiert wird und nur schwer beeinflusst werden kann, ohne dass bei neuem Generieren die Anpassungen wieder überschrieben geworden wären.

4 Gedanken zu „Firebug, „syntax error“ und DOCTYPE

  1. Hi,

    Ich hab mich nach langer Erfahrung auch mal an das mod_rewrite Modul herangetraut. Hab diese Fehler auch miteinkalkuliert aber eben nicht die .js Dateien mitausgeschlossen.
    Per Zufall bin ich auf diese Page gekommen und muss sagen.
    DANKE

    Hab lang genug daran rumgefummelt xD

    Achja für all jene die trotzdem noch auf dem Schlauch stehen

    RewriteRule \.(css|jpe?g|gif|png|swf|xml|js)$ – [L]

    Fügt die obige Zeile bei euren Regeln mit ein.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>