Firefox-`<textarea>`-Bug nach 25 Jahren behoben
(bugzilla.mozilla.org)- Der alte Bug 33654 in Firefox betraf das Problem, dass
<textarea>beim Anwenden vonROWS=undCOLS=den Platz für Scrollbars mit einrechnete und dadurch größer erschien als die angegebene Zahl von Zeilen und Spalten; inzwischen wurde er als Duplikat von Bug 1830576 geschlossen - In Umgebungen, in denen Overlay-Scrollbars deaktiviert sind oder die Einstellung „Scrollbars immer anzeigen“ genutzt wird, trat wiederholt das Phänomen auf, dass
<textarea rows=N>ungefähr mit einer Höhe von N+1 Zeilen berechnet wurde - Die frühen Diskussionen weiteten sich auf Schriftvererbung, erzwungenes
monospace, diecols-Berechnung anhand der durchschnittlichen Breite vonwundWsowie die Reservierung von Scrollbar-Platz aus; über lange Zeit sammelten sich Testcases, Patches und Screenshots an - In der Praxis sah
rows=1wie 3 Zeilen aus oderrows=2wurde mit einer Höhe von 3 Zeilen angezeigt, und beicols=80unterschieden sich die Zeilenumbruchpositionen zwischen IE und Firefox, sodass die Steuerung von Formularlayouts je nach Browser auseinanderlief - Nachdem Bug 1830576
VERIFIED FIXEDwurde, ist die Anwendung von Scrollbar-Abständen in WebKit, Chromium und Firefox konsistent geworden; Bug 33654 wurde alsRESOLVED DUPLICATEabgeschlossen
Status und Umfang von Bug 33654
- Bug 33654 war ein Defekt, bei dem
<textarea>ROWS=undCOLS=falsch anwendete, sodass bei deaktivierten Overlay-Scrollbars zusätzlicher Platz für horizontale und vertikale Scrollbars entstand - Produkt und Komponente sind
Core :: Layout: Form Controls; darunter fallen Layout und Darstellung von HTML-Formularsteuerelementen, insbesondere Elemente wietextarea - Der aktuelle Status ist
RESOLVED DUPLICATE of bug 1830576- Der Titel des Duplikat-Ziels Bug 1830576 lautet
Firefox sizes <textarea rows=N> as roughly N+1 rows tall, under an "always show scrollbars" configuration - Der Status von Bug 1830576 ist
VERIFIED FIXED
- Der Titel des Duplikat-Ziels Bug 1830576 lautet
- Der Bug wurde vor 26 Jahren eröffnet und vor 2 Jahren als
RESOLVED DUPLICATEgeschlossen - In den Metadaten sind Version
Trunk, Plattformx86 / All, Typdefect, PrioritätP3und SchweregradS3angegeben - Als Keyword ist
testcasevermerkt, das Whiteboard enthält[html][behavior]relnote-devel, und die Zahl der Stimmen wird mit 99 angegeben - Anhänge werden als
17 files, 17 obsolete filesangezeigt; Testcases, Patches und Screenshots wurden wiederholt hochgeladen
Erste sichtbare Symptome
- Im ersten Bericht schrieb Andrew McMillan, ein
TEXTAREA-Beispiel mitROWS=5 COLS=30werde ungefähr wieROWS=7 COLS=48angezeigt - In frühen Kommentaren folgten Beispiele, in denen
INPUT TYPE=TEXTundTEXTAREAdie angegebene Schrift nicht korrekt verwendeten oder der Bereich trotz sichtbarer Scrollbars zu hoch war - Die weitere Diskussion lief darauf hinaus, dass das textarea-Layout falsche Informationen erhält, bei Spalten zusätzlicher Platz vorhanden ist und bei Zeilen eine Zeile zu viel erscheint
- Schon früh wurde auch die Möglichkeit behandelt, dass die vorab reservierte Fläche für Scrollbars die Ursache ist
Schriftberechnung und frühe Patches
- In einem Beispiel aus einer HTML-Authoring-Newsgroup schien IE bei gemeinsamer Verwendung von
textarea { font-size: 8pt }und<textarea cols="40" rows="12">die Breite korrekt zu rendern, während Mozilla die Breite offenbar auf Basis einer 12-pt-Schrift berechnete - Eine Testdatei mit der Schrift
arialenthielt<textarea NAME=system_code wrap=soft rows=5 cols=30 WRAP style="font-family:arial"> - Rod ging davon aus, dass die Größenberechnung mit der Standardschrift korrekt ist und der Kern des Problems daher weniger das Sizing selbst als vielmehr die Tatsache ist, dass textarea die richtige Schrift nicht verwendet
- Kin fand Code, der bei gesetztem
PlainText-Flag des Editors zwangsweisefont-family: monospace;auf den Inhaltsbereich von TextControl anwendet- Wird dieser Code entfernt, wird die richtige Schrift verwendet
- Im NavQuirks-Modus bleibt jedoch das Problem, dass eine 30 Zeichen lange Zeichenkette in einer 30-Spalten-textarea nur etwa 2/3 der Breite einnimmt
- Als Ursache wurde die Methode von
nsFormControlHelperbenannt, die durchschnittliche Breite vonwundWaus der Schrift zu ermitteln, mit der Spaltenzahl zu multiplizieren und die Scrollbar-Breite hinzuzufügen, um die Breite der textarea zu berechnen
Patch to use the correct font.fügte den Initialisierungs-Flags des Plain-Text-EditorseEditorEnableWrapHackMaskhinzu und beschränkte die Anwendung vonfont-family: monospace;auf bestimmte Bedingungen- Dieser Patch wurde zeitweise als
RESOLVED FIXEDbehandelt, aber wieder geöffnet, nachdem der ursprüngliche Reporter meldete, dassCOLS=...zwar stimme,ROWS=...jedoch weiterhin falsch funktioniere
Wiederholte Reproduktionen und Duplikat-Bugs
- Die Liste der Duplikat-Bugs enthält zahlreiche Fälle, in denen
<textarea>eine Zeile größer erscheint als angegeben oderrows=1wie 3 Zeilen aussieht- Bug 46106:
Textarea displaying more rows than designated. - Bug 116779:
<textarea rows=1> shows 3 rows - Bug 133342:
textarea always rendered with one more row than defined - Bug 186271:
textareas are 1 row taller than specified - Bug 206946:
<textarea rows="2"> shows ~3 lines - Bug 911226:
<TEXTAREA> always rendered one line too tall !
- Bug 46106:
- Der interaktive Testcase war ein HTML-4.01-Strict-Dokument, in dem sich die Werte für
rowsundcolsper Button ändern ließen; es verwendete weder font-Tags noch proportional laufende Schrift- Das Ergebnis war, dass stets 3 Spalten mehr als der angegebene Wert vorhanden waren und die Zeilenanzahl meist um 1 höher war
- Bei Anforderung von
rows=1wurden 3 rows angezeigt
- In Linux- und Win2000-Trunk-Builds von 2002 wurde
<textarea cols=40 rows=2></textarea>als 3 rows angezeigt; beirows=Nwurden exaktN+1rows angezeigt - Auch der W3C-HTML-4.01-Test wurde als Referenzmaterial verwendet, mit Kommentaren, dass das Problem in den
ROWS-bezogenen Tests klar sichtbar sei - Auch unter Windows 2000 und Mozilla
0.9.3wurde ein Beispiel hochgeladen, in dem einerows=1-textarea offensichtlich nicht wie 1 row aussah
Diskussion zur Berechnung des Scrollbar-Platzes
- Comment 86 erklärt, dass die Größe der textarea als angegebene
cols/rowsplus Scrollbar-Platz berechnet wird - Es wurde analysiert, dass Mozilla Scrollbars im Gegensatz zu IE nur bei Bedarf anzeigt, weshalb Nutzer dieses Verhalten als defekt wahrnehmen
- Drei mögliche Optionen wurden vorgeschlagen
- Scrollbar-Größen bei der Größenberechnung der textarea nicht hinzufügen
- Scrollbars wie IE immer anzeigen
- Nur die Scrollbars einbeziehen, die angezeigt werden
- Gegen die dritte Option wurde eingewandt, dass die Größe davon abhängt, ob Scrollbars angezeigt werden, und die Anzeige der Scrollbars wiederum von der Größe abhängt, was zyklisch ist
- Comment 87 schlug als vierte Option vor, dass
ROWSundCOLSnur die Content-Größe der textarea steuern und die textarea größer wird, wenn Scrollbars erscheinen - Die weitere Implementierungsrichtung wurde so diskutiert: zunächst Reflow mit width/height ohne Scrollbar durchführen, um zu bestimmen, ob Scrollbars nötig sind; falls ja, mit neuer width/height erneut reflowen
Auswirkungen für Nutzer
- Wenn trotz
rows="2"eine textarea mit 3-row-Höhe erscheint, wird die Absicht verwischt, die gewünschte Eingabemenge visuell zu vermitteln- Eine Webanwendung forderte einen kurzen Zusammenfassungstext an und nutzte
rows="2", um eine Eingabemenge zu signalisieren, die „mehr als eine Zeile, aber kein Essay“ ist - Wegen der Verhaltensunterschiede zwischen Firefox, IE6 und Opera 8 erzeugte derselbe
rows-Wert je nach User Agent unterschiedliche visuelle Hinweise
- Eine Webanwendung forderte einen kurzen Zusammenfassungstext an und nutzte
- Auch wenn der Inhalt der textarea nicht scrollte, folgten Kommentare, dass das Firefox-Verhalten falsch sei
- Selbst wenn für eine textarea, die wie eine Adresse meist nicht mehr als drei Zeilen benötigt,
rows="3"angegeben wird, zeigt Firefox immer eine zusätzliche Zeile an - Die Seite wird unnötig größer, und Nutzer könnten denken, das Feld sei größer als erwartet, weil sie nicht genug Informationen eingetragen haben
- Selbst wenn für eine textarea, die wie eine Adresse meist nicht mehr als drei Zeilen benötigt,
- Beim Vergleich mit
cols=80erklärte eine Screenshot-Beschreibung, dass IE 801-Zeichen bis zur Scrollbar-Kante füllt und dann umbricht, während Firefox nach 801-Zeichen noch Platz für zwei weitere Zeichen hat und danach eine horizontale Scrollbar erscheint - Auch 2019 gab es noch Kommentare, dass das Problem weiterhin besteht; als betroffenes Beispiel wurde die Trello-Karte
Chat bar is a line taller than usual on Firefoxvon Discord genannt
Langjährige Patch-Versuche
- Hideo Saito hängte mehrfach Patches und Testcases an
patch for rows and colswrap="off"-Patch-Testcasebase patchadditional patch for another bugpatch which does not remove space
- Ein Ansatz bestand darin,
nsTextControlFrame::Reflowmit der intrinsischen Größe ohne Scrollbar auszuführen und dann, falls Scrollbars vorhanden sind, die Scrollbar-Größe zur intrinsischen Größe hinzuzufügen und erneut zu reflowen - Auch ein Ansatz wurde behandelt, bei dem
GetScrollbarStylesgeändert wird, um zu steuern, ob der Text-Control-Frame Scrollbars aufauto,hiddenoderscrollsetzt - roc bevorzugte eine Lösung in
nsTextControlFramestatt umfangreicher Änderungen annsGfxScrollFrame - Spätere Patches durchliefen wiederholt Reviews und Überarbeitungen rund um Mechanismen wie
SetScrollbarStyles,GetScrollbarStyles,SetScrollbarSpace,GetScrollbarOverflowState,FrameNeedsReflowund post-reflow callback - Einige Patches erhielten
review-oder wurden als obsolete markiert; Reviewer wiesen darauf hin, dass Updates für den Trunk erforderlich seien
Workarounds und Grenzen
- Es gab den Vorschlag, dass das Hinzufügen von CSS
textarea{ overflow-x: hidden }das Problem löse - Dieser Ansatz galt nur unter der Bedingung, dass keine horizontale Scrollbar benötigt wird
- Ein anderer Kommentar widersprach, dass dieser Bug nicht allein mit CSS
overflowbehoben werden könne und Firefox der einzige Browser sei, der bei textarea eine zusätzliche Zeile rendere - Emilio Cobos Álvarez sagte, die Ursache scheine die Scrollbar-Größe zu sein, und das Anwenden von
scrollbar-width: noneauf<textarea>scheine das Problem zu lösen - Derselbe Kommentar ergänzte jedoch, dass der Bug selbst trotzdem behoben werden müsse
Abschließende Einordnung
- Vor 3 Jahren bat BugBot um eine Prüfung, ob der Schweregrad angehoben werden sollte, da dieser Bug zwar den relativ niedrigen Schweregrad
S3hatte, aber 27 Duplikate, 103 Stimmen und 91 CCs aufwies - Die Bug-Zusammenfassung wurde von
TEXTAREA incorrectly applying ROWS= and COLS=zuTEXTAREA incorrectly applying ROWS= and COLS= (horizontal / vertical scrollbar extra space, with overlay scrollbars disabled)geändert - Daniel Holbert fügte Bug 1830576
Firefox sizes <textarea rows=N> as roughly N+1 rows tall, under an "always show scrollbars" configurationals Abhängigkeit hinzu - Luke Warlow fragte, ob dieser Bug geschlossen werden könne, da Bug 1830576 behoben sei und die Anwendung von Scrollbar-Abständen in WebKit, Chromium und Firefox nun konsistent geworden sei
- Emilio Cobos Álvarez stimmte dem zu, und Bug 33654 wechselte von
NEWzuRESOLVEDund wurde alsDUPLICATEgeschlossen - Als Duplikat-Ziel wurde Bug 1830576 festgelegt; dieser Bug hat den Status
VERIFIED FIXED
1 Kommentare
Meinungen auf Hacker News
Ha! Ich hatte diesen Bug während des Großteils dieser 25 Jahre abonniert. Damals gab es Firefox noch nicht, und er war nicht als Bug zu Netscape Navigator eingetragen, sondern bei Mozilla, ungefähr aus der Zeit davor bzw. danach
Ich weiß nicht mehr, warum ich ihn abonniert hatte, vermutlich hatte ich kommentiert. Alle paar Jahre kam eine Benachrichtigungs-Mail, was mich immer zum Lachen brachte, und vor ein paar Tagen wurde er endlich behoben
Ich dachte immer, so etwas wie
html { background: transparent; }müsste einfach funktionieren. Allerdings bewirkt dieser Bugfix das nicht wirklich. Zunächst ist es keine Funktion, die Websites standardmäßig wählen, sondern eine Einstellung, die Nutzer oder Erweiterungen aktivieren können. Das ist vermutlich besser so, denn wäre es standardmäßig erlaubt, hätte es neue Wege für Clickjacking eröffnetEtwas abseits des Themas, aber ich hasse diesen Trend zu menschenlesbaren Zeitangaben wie „vor einem Monat“ wirklich. Zeigt mir einfach das Datum, dann kann ich selbst rechnen
Outlook, zumindest die Mac-Version, ist am schlimmsten. Bei Mails vor heute steht zum Beispiel nur „gestern“, und erst wenn man die Mail anklickt, sieht man auch die Uhrzeit. Ich bekomme an einem Tag Dutzende Mails; wenn dann 50 Nachrichten hintereinander nur als „gestern“ angezeigt werden, ist das völlig nutzlos
Bier kalt, Zeitstempel exakt – so ist es gut
Firefox’ Bugzilla ist definitiv einer der am längsten laufenden Bugtracker. Beeindruckend ist, dass er trotz zahlloser Überarbeitungen noch ziemlich viel vom ursprünglichen Gefühl behalten hat. Früher war das eine ziemlich raue, monströse Codebasis
Um 2000 herum habe ich in einer Windows-Entwicklungsorganisation eine Instanz aufgesetzt, um einen eigenen Bugtracker auf Basis von Microsoft Access/Outlook zu ersetzen. Er war komplex, aber eine Zeit lang gehörte er praktisch zur Spitzenklasse der Bugtracker. FogBugz fing damals ebenfalls gerade an, und ich würde sagen, dieses Team gehörte zu den frühen Teams, die User Experience ernsthaft berücksichtigt haben
FogBugz dagegen war ein Tool, das ich bei Gelegenheit immer schon einmal ausprobieren wollte
So etwas wärmt einem das Herz. Kürzlich habe ich bei einem 24 Jahre alten Firefox-Bug etwas Ähnliches erlebt: https://bugzilla.mozilla.org/show_bug.cgi?id=62151
Bei den lange ungelösten Bugs nervt mich am meisten, dass man in LibreOffice die x-Achse eines Streudiagramms nicht richtig als Datumsformat festlegen kann
https://bugs.documentfoundation.org/show_bug.cgi?id=54132
Ein 12 Jahre alter Bug. Den Kommentaren nach zu urteilen ist der Code so „furchtbar kompliziert“, dass man eine Behebung scheut, weil sie wahrscheinlich Regressionen verursachen würde
Als Nächstes hätte ich gern XDG. Darauf warte ich auch schon seit 20 Jahren [1]
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=259356
Ehrlich gesagt löst diese Spezifikation reale Probleme, die Menschen haben, nicht aktiv. Der Großteil der Adoption ist das Ergebnis davon, dass Leute, die sich an der Struktur ihres
$HOME-Verzeichnisses stören, Maintainer nervig unter Druck gesetzt haben; 99 % der Nutzer ist es egal, ob ein Programm die XDG Base Directories befolgt oder nicht. Es dient im Grunde nur dazu, anhand einer freedesktop-Spezifikation, die seit über 20 Jahren nicht breit angenommen wurde, behaupten zu können, es sei „aufgeräumter“Persönlich mag ich diese lockere Trennung von Konfiguration/Daten/Cache und die implizite Absicht dahinter nicht. Nicht alles passt in diese Kategorien, und dadurch wird das Systemverhalten schwer vorhersehbar. Wird ein Daemon meinen Cache löschen? Werden Nutzer ihren Konfigurationsordner herumkopieren? Was genau wird gesichert? Die Spezifikation enthält keinen Standard dafür, wie die Ordner tatsächlich behandelt werden sollen. Sie ist absichtlich vage, aber auf eine Weise vage, die kaputtgehen kann, wenn Leute Annahmen treffen
Es ist ähnlich wie
/usrvon Root zu trennen,/usr/localvon Root zu trennen oder/optzu haben. Relikte einer vergangenen Ära bleiben weiter bestehen, und es fühlt sich an, als wolle man noch eines schaffenIn unserem Produkt unterstützen wir es widerwillig auch, aber nur, wenn die entsprechenden Umgebungsvariablen explizit gesetzt sind. Das XDG-Verhalten, wonach auf allen Linux-Systemen bestimmte Defaults gelten sollen, wenn sie nicht gesetzt sind, ignorieren wir zu 100 %. Denn es unterscheidet sich von dem, was andere UNIX-artige Systeme wie macOS erwarten. Wir haben gerade genug eingebaut, um zu verhindern, dass Arch-Linux-Enthusiasten jede Woche in unserem Bugtracker auftauchen und die Übernahme fordern; sie machen nicht einmal 1 % unserer Nutzer aus. Es ist schon schwer genug, den Nutzern per Dokumentation zu erklären, wo sie die Dateien unseres Produkts auf ihrem System finden. Nutzer kennen XDG nicht immer, und für die meisten ist XDG auch keine bereits erwartete, etablierte Konvention. Abgesehen von Leuten, die ein sauberes Benutzerverzeichnis wollen, bietet es keinen starken Wert, und es gibt zu viel Altlast, um alle auf diese Spezifikation umzuziehen
Ehrlich gesagt sollte man das Ganze neu denken und zu einer containerbasierten Lösung übergehen, bei der Desktop-Apps nicht aus ihrem kleinen Gefängnis ausbrechen können. Ziemlich ähnlich wie bei Snap-Apps. Von Nix könnte man vielleicht auch etwas lernen. Man muss anerkennen, dass es gescheitert ist, alle Linux-User-Apps weltweit dazu zu bringen, sich um die XDG Base Directories — oder sogar um das Benutzerverzeichnis — zu kümmern und sie zu übernehmen. Schon die Unterstützung von Ports für Mac und Windows ist schwer genug, und die folgen diesem Verhalten nicht. Wir sollten vom UNIX-Rechtemodell wegkommen, bei dem Programme mit Benutzerrechten laufen, und jedes Programm unter einer eigenen uid ausführen. Android funktioniert so
Bitte behebt den Bug, bei dem die Kopieroption zufällig deaktiviert ist, obwohl es Text zum Kopieren gibt. Das macht mich wirklich wahnsinnig
AWS löst dieses Problem, indem es alte Bugs und alle Erwähnungen davon regelmäßig löscht
Verwandter Beitrag vom letzten August:
Happy 25th Birthday to Bugzilla
https://news.ycombinator.com/item?id=37279543
Cool! Allerdings ist der 28.03.2000 noch nicht 25 Jahre her