2011-05-06 29 views
4

在工作中,我們偶然發現了Bugzilla創建的HTML輸出,導致線條太長,因爲瀏覽器沒有打破線條。 這發生在Chrome上,但不是Firefox 3.5上,所以我們並不在乎。但Firefox 4的行爲就像Chrome一樣,所以我們必須找到另一種解決方法。在預標籤內只使用CR作爲linebreak不起作用

一個例子是:

<html> 
    <body> 
    <pre> 
     Lorem ipsum dolor sit amet, consetetur sadipscing elitr,&#013;sed diam nonumy eirmod tempor invidunt ut labore et&#013;dolore magna aliquyam erat, sed diam voluptua. At vero eos&#013;et accusam et justo duo dolores et ea rebum. Stet clita kasd&#013;gubergren, no sea takimata sanctus est Lorem ipsum dolor sit&#013;amet.&#013; 
    </pre> 
    </body> 
</html> 

服務器僅使用Cr作爲斷行,這是非常少見,通常的替代品(CR + LF,僅LF)正常工作,所以正確的方式來解決這個是告訴Bugzilla服務器使用這些換行方法之一。無論如何,我很好奇爲什麼這個 不起作用,忽略換行符似乎是瀏覽器的「正確」方式。

另外,我發現Chrome和FF 4使用的Greasemonkey腳本,一個陌生的地方解決方法(的this one修改後的版本):

var els = document.getElementsByTagName("*"); 
for(var i = 0, l = els.length; i < l; i++) { 
    var el = els[i]; 
    el.innerHTML = el.innerHTML; 
} 

看來這會一直在頁面上沒有影響,但與此腳本,突破線突然顯示正確。

所以我的問題是:

  1. 是Chrome/FF 4路的「正確」的方式來處理內部<pre>這類換行嗎?
  2. 爲什麼Greasemonkey腳本工作?
+0

是的,Chrome/FF是「正確的」,並符合C和Unix的行爲。 CR(回車)應該回到同一條線 - 就像在舊的打字機時代一樣。除了HTML不允許類型重疊的方式。 ... LF(換行符)使行前進,並且在C/unix/Browsers中,它也重置到行的開頭(與打字機不同)。 ...... AFAIR,Mac出於某種原因將CR視爲換行,這使得它成爲該規則的例外。 – 2011-05-06 20:29:42

+0

@Bock:是的,根據http://en.wikipedia.org/wiki/Newline#Representations – schnaader 2011-05-06 21:43:14

+0

,版本9以及其他一些系統確實使用CR作爲換行符。官方的4.01規範:http:// www.w3.org/TR/html401/struct/text.html#h-9.3。4 – 2014-08-04 10:22:34

回答

3

GM腳本的工作原理很明顯,JS在寫入DOM時動態地將CR(\r)轉換爲LF(\n)。

請參閱this test at jsFiddle。請注意第2行末尾的CR(十進制13)如何轉換爲LF(十進制10)。

+0

謝謝,非常有幫助! – wukong 2012-12-27 09:39:58

3

是的,HTML RFC定義換行爲: http://www.w3.org/TR/html401/struct/text.html#line-breaks

一個換行符被定義爲回車(&#x000D;),換行(&#x000A; )或回車/換行對。所有換行符構成了空格。

但是,一個裸回車是非常罕見的。我並不感到驚訝,它不起作用。但從技術上講,我會說FF4和Chrome是錯誤的。

不知道爲什麼你的greasemonkey腳本正在工作。我的猜測是,獲取el.innerHTML正在將CR轉換爲CR-LF或LF。

+3

該部分用於一般文字。 [預先格式化的規範](http://www.w3.org/TR/html401/struct/text.html#preformatted)指出,包含CR和LF的空格可能保持不變。預期的元素是可以預期的,通常情況下,只留下空白。這意味着CR和LF可以像語言程序員期望的那樣自由行事 - 就像Chrome和FF4一樣。 – 2011-05-06 21:28:50