Mit nur CR als Zeilenumbruch innerhalb der pre-tag nicht funktioniert
Bei der Arbeit, stolperten wir über Bugzilla erstellen von HTML-Ausgabe, die led-Zeilen viel zu lange, weil der browser nicht brechen die Linien.
Dies geschah auf Chrome, aber nicht Firefox 3.5, so dass wir nicht wirklich kümmern. Aber Firefox 4 ist, verhält sich wie Chrome, also mussten wir finden eine andere Lösung.
Ein Beispiel:
<html>
<body>
<pre>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et
dolore magna aliquyam erat, sed diam voluptua. At vero eos
et accusam et justo duo dolores et ea rebum. Stet clita kasd
gubergren, no sea takimata sanctus est Lorem ipsum dolor sit
amet.
</pre>
</body>
</html>
Den der server nur CR als Zeilenumbruch, das ist sehr ungewöhnlich, und die üblichen alternativen (CR+LF nur LF) arbeiten korrekt, so dass der richtige Weg dieses Problem zu beheben ist zu sagen, das Bugzilla-server verwenden Sie eine der folgenden linebreak Methoden. Wie auch immer, ich bin neugierig, warum dieser
funktioniert nicht und ignorieren die Zeilenumbrüche zu sein scheint, den "richtigen" Weg für Browser.
Auch, fand ich eine seltsame lokale workaround für Chrome und FF 4 mit einem Greasemonkey-script (modifizierte version von diese eine):
var els = document.getElementsByTagName("*");
for(var i = 0, l = els.length; i < l; i++) {
var el = els[i];
el.innerHTML = el.innerHTML;
}
Es scheint, dies habe keine Auswirkungen auf die Seite, aber mit diesem script, Zeilenumbrüche plötzlich korrekt angezeigt.
Also meine Fragen sind:
- Ist die Chrome/FF, 4-Weg die "richtige" Art und Weise zu behandeln, diese Art von Zeilenumbrüche innerhalb
<pre>
? - Warum ist das Greasemonkey-Skript zu arbeiten?
- Ja, Chrome/FF der "richtige" ist, und im Einklang mit dem Verhalten von C und Unix. CR (Carriage Return) sollte gehen Sie einfach zurück auf die gleiche Zeile -- genau wie in den alten Schreibmaschine Tage. Außer, dass HTML nicht erlaubt, die Art zu überlappen, dass Art und Weise. ... LF (Line Feed), Fortschritte der Zeile und in der C / unix / Browser, es setzt auch an den Anfang der Zeile (im Gegensatz zu Schreibmaschinen). ... ... ANMUTIGEN, Mac behandelt, die CR als einen Zeilenvorschub aus irgendeinem Grund-so dass es die Ausnahme von der Regel.
- Ja, MAC OS bis Version 9 und einige andere Systeme verwenden in der Tat CR als einen Zeilenvorschub nach en.wikipedia.org/wiki/Newline#Representations
- Von offizieller 4.01 pre-spec: w3.org/TR/html401/struct/text.html#h-9.3.4
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem GM-script funktioniert, weil anscheinend JS wandelt CR (
\r
) LF (\n
), dynamisch auf-schreibt auf die DOM.Sehen dieser test bei jsFiddle. Beachten Sie, wie die CR (dezimal 13), am Ende der 2. Zeile, wird umgewandelt zu LF (dezimal 10).
Ja, die HTML-RFC definiert einen Zeilenumbruch, wie:
http://www.w3.org/TR/html401/struct/text.html#line-breaks
Allerdings, eine bloße carriage return ist extrem selten. Ich bin nicht überrascht, dass es nicht funktioniert. Aber technisch, würde ich sagen, FF4 und Chrome sind im Unrecht.
Nicht sicher, warum Ihr greasemonkey-Skript funktioniert. Meine Vermutung ist, dass sich die el.innerHTML ist die Konvertierung von CR-CR-LF oder LF.
pre
Elemente zu erwarten sind, und in der Regel tun, lassen Sie Leerzeichen allein. Dies bedeutet, dass CR und LF sind frei zu Verhalten, als Sprache, die Programmierer kommen zu erwarten, dass -- wie Chrome und FF4 tun.