Firefox ändert Quelltext

  • Hallo,

    ich habe mal wieder einen sehr merkwürdigen Fehler bei mir. Auf der Website http://bamboocha.kicks-ass.net/srvbh/ wird im Menü ab und zu der erste Menüpunkt "News" falsch dargestellt. Warum ab und zu? Das weiß ich auch nicht. Ohne bestimmtes Muster funktioniert es manchmal und manchmal nicht.

    Wenn jemand den selben Fehler beobachtet kann er jetzt noch folgendes beobachten:

    Wenn der erste Menüpunkt nicht richtig angezeigt wird, und man das menü komplett makiert und anschließend mit rechtsklick den Auswahlquelltext anzeigen lässt, so bekommt man folgenden angezeigt:

    Code
    <center>
    	<a href="index.php?c=1" id="menu2"></a><p><a href="index.php?c=1" id="menu2"><br>&nbsp;&nbsp;&nbsp;News</a></p>
    	<a href="index.php?c=2" id="menu2"><p><br>&nbsp;&nbsp;&nbsp;Verband</p></a>
    	<a href="index.php?c=3" id="menu2"><p><br>&nbsp;&nbsp;&nbsp;Satzung</p></a>
    .
    .
    .
    	<br>
          </center>

    Wenn man jetzt allerdings (ohne reload oder ähnliches) den Quelltext der gesammten Seite anzeigen lässt, bekommt man an der selben Stelle folgenden Quelltext angezeigt:

    Der obere Quelltext würde die Seite wohl fehlerhaft darstellen, der untere müsste die Seite korrekt darstellen.

    Hat irgendjemand eine Idee zu diesem höchst ungewöhnlichen Problem?

    Viele Grüße,

    Daniel

  • Mir fallen 2 Sachen auf.

    Erstens ist der Quellcode fehlerhaft. Es könnte also sein, dass sich die Fehlerkorrektur des Firefox unter bestimmten Umständen anders verhält als im Normalfall, das könnte u.a. von der Übertragungsgeschwindigkeit abhängen.

    Zweitens wäre deine installierte Firefox-Version interessant. Bei Versionen vor v 1.5 gab es da einen Bug der "zufällig" falsche Darstellungsergebnisse produzierte.

    Das beim Auswahl-Queltext anzeigen ein anderer Code angezeigt wird, ist normal, da der Firefox auf den Auswahl-Quelltext schon im vorab verschiedene Korrekturen und Optimierungen anwendet.

  • Zitat von JonHa

    Erstens ist der Quellcode fehlerhaft.


    Sry, hatte den Quelltext einfach nur schnell runtergeschrieben und noch nicht großartig korrigiert.

    Zitat von JonHa

    das könnte u.a. von der Übertragungsgeschwindigkeit abhängen.


    Der Gedanke kam mir auch schon.. habe das Gefühl es verhält sich auch anders wenn ich im Homenetzwerk darauf zugreife als über die dyndns weiterleitung.

    Zitat von JonHa

    Zweitens wäre deine installierte Firefox-Version interessant.


    Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6

    Zitat von JonHa

    Das beim Auswahl-Queltext anzeigen ein anderer Code angezeigt wird, ist normal, da der Firefox auf den Auswahl-Quelltext schon im vorab verschiedene Korrekturen und Optimierungen anwendet.


    öhm.. wieso sollte er das denn tun? Ich dachte FF zeigt mir den Original Quelltext an und nichts mit Korrekturen und Optimierung.

  • Zitat von DerDaniel


    Sry, hatte den Quelltext einfach nur schnell runtergeschrieben und noch nicht großartig korrigiert.


    Ich vermute hier den fehlerhaften Quelltext als einen Grund für das Fehlverhalten. Da <p>-Elemente garnicht in <a>-Elementen vorkommen dürfen, erscheint es mir so, als würde der Firefox hier teilweise ne Fehlerkorrektur versuchen, die er sonst nicht macht, was dann zum unerwünschten Verhalten führt.

    Eine Grundregel bei HTML ist, dass du bei fehlerhaftem Code nicht vorhersehen kannst, ob und wie Browser versuchen werden, den zu korrigieren. Deshalb sollte man invaliden Code vermeiden.

    Zitat


    öhm.. wieso sollte er das denn tun? Ich dachte FF zeigt mir den Original Quelltext an und nichts mit Korrekturen und Optimierung.

    Wenn du den Seitenquelltext anzeigen lässt, kriegst du den Original-Quelltext. Beim Auswahl-Quelltext verhält es sich anders, da der Firefox den Quelltext ja erst parsen (d.h. analysieren und verarbeiten) muss um die markierte Position festzustellen. Und dabei findet halt ne grundlegende Fehlerkorrektur statt. Wenn ich mich nicht irre, ist es sogar so, dass der Firefox das geparste angezeigte Dokument einfach wieder in HTML-Code umwandelt, wenn der Auswahlquelltext verlangt wird.

  • Dazu wär ne beispielseite mal genial

    (Nicht das ich dir nicht glaube. In solchen Punkten vertrau ich dir vollkommen, aber sowas (Beispielseite) für andere "Zweifler" in der Hinterhand zu haben wär recht gut :) )

    Signaturen sind doof.

  • Hallo zusammen.

    Ich habe ein ähnliches Problem und für mich stellt sich die Frage, ob es eine Möglichkeit gibt, die Code-Korrektur von Firefox zu umgehen oder auszuschalten. Das macht zwar nicht wirklich Sinn, würde aber das Problem bestätigen oder auch nicht. (Im Quellcode liegt der Fehler nicht, das wurde ausgiebigst getestet)


    Kann man über diese Codekorrektur bei Firefox etwas nach lesen, sprich wie das funktioniert etc. ? Habe dazu nichts hinfreiches finden können.

    Ich nutze Firefox 1.5.0.9.

    Vielen Dank im vorraus für die Hilfe =)

  • Das mit dem Auswahl-Quelltext ist gar nicht anders zu lösen.

    Stell sich mal wer vor, er hat eine Seite im Orginal so:

    Code
    <p id="dings">Mama ist doof</p>
    <script>
     document.getElementById("dings").firstChild.nodeValue = "Papa ist doof";
    <script>


    Dann würde der Browser das "Mama ist doof" ja direkt überschreiben mit "Papa ist doof". Und was anderes als das "Papa ist doof" kann man dann auch nicht mehr auswählen.

    Also kann mit dieser Funktion nicht den Original-Quelltext anzeigen, sondern den aktuell bestehenden/gerenderten. Und das Firefox vor dem Rendern erst einmal dafür sorgen muss, dass eine verarbeitbare Vorlage besteht, kommt vorher natürlich auch erst einmal die Fehlerkorrektur zum Einsatz, die evtl. fehlende Teile ergänzt.

    Das ist im übrigen eh eine Entwicklerhilfe und für die Gold wert.

    Und wenn man die genaue Fehlerkorrektur beschreiben würde, würde das länger dauern, als zu erklären wie es richtig geht. Darum gibt es für die Fehlerkorrektur auch keine gültigen Regeln, sondern nur für "wie es richtig zu sein hat".

    Eine Deaktivierung ist meines Wissens nach nicht möglich (halte ich aber auch nicht für unmöglich).

    Welches Problem hast Du denn?

  • Das Problem sieht so aus, dass serverseitig mit php ein Menü dynamisch, sprich aus der Menge von Datensätzen, aufgebaut wird. Die Menüpunkte fungieren als Links und sind jeweils in einem eigenen Div-Container.

    Der Darstellungsfehler taucht nur im Firefox auf, nicht im IE. Wir haben das ganze bereits auf verschiendenen Servern gehabt und das Problem tritt weiterhin auf, kann also nicht am Server liegen (oder php-version etc.).

    Hinzu kommt, dass es nicht jedes mal der gleiche Menüpunkt ist, der falsch dargestellt wird, sondern willkürlich mal jeden erwischt. Zwar gibt es Menüpunkte die merkbar öfters falsch dargestellt werden als andere, aber das darf nichts bedeuten, da alle Menüpunkte in der gleichen Schleife erstellt werden und somit identisch sein müssen.

    Wir sind bereits so weit, dass wir sagen können, dass der Firefox halt diese besagte Quellcodekorrektur durchführt und dadurch diese Darstellungsfehler auftreten, allerdings macht Firefox diese Korrektur nicht immer und wie gesagt sehr willkürlich (ort/menge).

    Den Quelltext haben wir auch schon einige Male runtergebrochen bis er fast nur noch aus dem div-Container bestand, aber das hat keine Änderungen gezeigt.

    Deswegen war meine Frage eingangs, ob man diese Html-Korrektur ausschalten kann (wäre eh eine schlechte Lösung gewesen, da es dann jeder client hätte machen müssen), wodurch dann ja die fehlerhafte Darstellung beseitigt wäre.
    Da das nicht geht müsste ein anderer Lösungsansatz her, leider haben wir keine Idee mehr was man ändern könnte und weitere Hilfen und Hinweise haben wir im Internet auch nicht auffinden können.

    Über Tipps sind wir natürlich dankbar =)

  • Ich kenne deinen Quellcode nicht, kann aber nur sagen, dass wenn der Firefox Korrekturen durchführen muss, der Quelltext wohl doch nicht ganz einwandfrei ist.

    Dass es nicht korrekt ist, wenn bei mehrmaligen Seitenaufrufen entwas unterschiedliches rauskommt, da stimme ich zu...

    Und abschalten lässt sie sich natürlich nicht. Du kannst höchstens eben korrekte Dokumente schreiben, sodass sie nicht mehr nötig ist, oder auf XML/XHTML umsteigen, wo bei Fehlern keine Korrektur durchgeführt wird, sondern gnadenlos abgebrochen wird.

  • Wie immer, meldet der HTML-Validator einen ganzen Sack Fehler. Nach meinen
    Erfahrungen sind solche Probleme schlagartig weg wenn man diese korrigiert.
    Dafür gibt's ja diese Tools.

    Vermutlich ist PHP auch nicht die erste Wahl.

    Grüße aus dem Spessart, Joe

  • Zitat von Scheppertreiber

    Nach meinen
    Erfahrungen sind solche Probleme schlagartig weg wenn man diese korrigiert.


    Ist bei meiner Erfahrung selten der Fall. Der Validator prüft ja nur gültige Schreibweise, nicht ob die Logik stimmt. Und meist ist die die Fehlerursache.

    Zitat von Scheppertreiber

    Vermutlich ist PHP auch nicht die erste Wahl.


    Warum nicht? Und was wäre es?

  • Zitat von bugcatcher


    Ist bei meiner Erfahrung selten der Fall. Der Validator prüft ja nur gültige Schreibweise, nicht ob die Logik stimmt. Und meist ist die die Fehlerursache.


    Warum nicht? Und was wäre es?

    Eine halbwegs schlüssige Logik setze ich einfach mal voraus :D

    Flamewar über PHP ? Gehört nicht hierher. Ich habe das mal eine Woche
    probiert, es ist mir zu langsam und zu starr (Wie gesagt: MIR).

    Grüße aus dem Spessart, Joe

  • hmm. Das hilft noch nicht weiter.

    So sieht der richtige Menüpunkt aus.

    Und so der vom Firefox "korrigierte".

    Wie man sieht schließt Firefox die <a> Tags. Vermutlich hat er ein Problem damit, wenn im <a> Tag ein <div> enthalten ist.

  • Logik-Fehler. <a> ist ein Inline-Element, <div> ein Block-Element. Ein Inline-Element kann keinen Block umfassen. Die Verschachtelung ist also ungültig. Firefox beendet/vervollständigt daher das <a> an den Übergängen vom Block. Du kannst z.B. ja auch kein <a><table>[...]</table></a> schreiben.

  • Zitat von bugcatcher

    Logik-Fehler. <a> ist ein Inline-Element, <div> ein Block-Element. Ein Inline-Element kann keinen Block umfassen. Die Verschachtelung ist also ungültig. Firefox beendet/vervollständigt daher das <a> an den Übergängen vom Block. Du kannst z.B. ja auch kein <a><table>[...]</table></a> schreiben.

    Ah. Ok.
    Hab das schon fast befürchtet, dass es daran liegt.
    Danke dir.

    Stellt sich nur noch die Frage warum ff den Fehler willkürlich/zufällig behebt und das mit einer Quote von vielleicht 10%.

  • Also, was beim Firefox noch nicht so perfekt ist, ist das "schon Rendern, obwohl noch am laden". Die Seiten werden daher während des Ladevorgangs mehrfach "nachgerendert". Das führt immer mal wieder zu seltsamen Ergebnissen. Grundsätzlich kann man es daher (wenn es auf verschiedenen Firefox-Installationen reproduzierbar ist!) von einem Firefox-Bug reden. Denn er muss IMMER das selbe darstellen (ob falsch oder richtig ist dabei erstmal Nebensache), wenn er den selben Quelltext immer und immer wieder rendert.

    Was in deinem Fall natürlich wenig hilfreich ist.

  • Wunderbar. Nun funktionierts einwandfrei.
    Ich hab einfach die div und a Blöcke getauscht, nun bedarf es keiner Fehlerkorrektur vom ff mehr und alles wird richtig dargestellt.
    EDIT: also nicht getauscht, aber so umgebaut das es von der Logik richtig ist
    Danke bugcatcher. :)