molily: JavaScript-Ergänzung: Neue Antworten anzeigen

Beitrag lesen

Hallo zusammen,

Ein Feature hat mir schon lange bei diesem Forum gefehlt: Eine Liste am Anfang der Forumshauptseite mit Links zu neuen Antworten, als ungelesenen Beiträgen, die sich auf meine Beiträge beziehen.

Nun habe ich mir ein JavaScript für die Benutzerspezifische Ansicht geschrieben, welches nach dem Laden des Dokuments die Threadliste nach neuen Antworten durchwühlt und diese oben verlinkt:

http://molily.de/temp/forum.js

Vielleicht ist euch dieses Script ebenfalls hilfreich, die Benutzung wird im Script erklärt.
(Bitte kopiert euch das Script auf euren eigenen Webspace oder z.B. auf http://localhost/, falls ihr es verwendet.)

Zusammen mit meinem Benutzer-Stylesheet sieht das dann z.B. so aus:

Das Script fügt, wenn es neue Antwort gibt, die orangene Meldungsbox ein. Das Element, an das die Box angehängt wird, kann im Script festgelegt werden, die Formatierung muss im Benutzer-Stylesheet erfolgen. Weiteres dazu steht im Script selbst.

Ich habe das Script mit MSIE 6, Konqueror 3.5, Opera 8.51, Mozilla Firefox 1.5 getestet.

Das Interessante für mich bei der Entwicklung war das Austesten von Methoden, die Operationen am DOM-Elementenbaum erlauben, bevor der load-Event gefeuert ist (siehe auch Breaking onload limits, wie im Zusammenhang mit Unobtrusive JavaScript angesprochen). Ich musste leider feststellen, dass die Timer- bzw. Scheduler-Methode, wie sie prominent von domFunction benutzt wird, bei Seiten vom Kaliber der Forumshauptseite nicht zuverlässig funktioniert. Wenn document.getElementById("root") zur Verfügung steht, sind dennoch nicht alle li-Elemente darin über getElementsByTagName("root") ansprechbar. Dasselbe gilt für document.body, was mich äußerst überraschte.

Eine erste Version mit einer eigenen Scheduler-Funktion habe ich daher verworfen. Beim obigen Script und anderen Scripten werden ich eine einfache Kombination aus abwärtskompatiblem onload und den (undokumentierten, proprietären) DOMContentLoaded-Event für Gecko-Browser verwenden. Dadurch erscheint die »Neue Nachrichten«-Meldungsbox im Firefox am schnellsten nach der Übertragung der Seite, in den anderen Browsern wird erst mit dem load-Ereignis nach neuen Antworten gesucht. Das ist unschön, aber einen zuverlässigen Workaround für DOMContentLoaded in anderen Browsern gibt es offenbar nicht. Ich schlage diese Vorgehensweise auch für ähnliche Forums-Scripte vor, die Funktion addContentLoadListener() sollte beliebig weiterverwendbar sein.

Mathias