Error tolerance and quirk mode (zhTW)
出自 MozTW Wiki
容錯與 quirk 模式
原文:Error tolerance and quirk mode (en) (作者:danielwang 譯者:教父)
除了安全性問題之外,Microsoft Internet Explorer 的正字標記之一就是它的容錯能力。其實整個 Microsoft Windows 開發平台都是這樣。容錯能力讓許多開發者覺得很幸福。不幸的是,對某些開發者來說,尤其是對平台設計者本身來說,這也是個惡夢。
許多使用者都問過,為什麼 Mozilla(和 Firefox)不能像 Internet Explorer(IE)一樣,容忍更多的錯誤。他們認為如果 Mozilla 可以把編碼不良的網頁處理得更好一點,問題網站就會少一點,那 Mozilla 被接受的程度也就會高一點。但是技術上而言,這既不可能也不可取。
在網站開發的圈子裡,我們把不符合標準的瀏覽器佈局行為叫做怪癖(quirk)。這些行為可能是程式錯誤,或是本來就設計成這樣(為了回溯相容或容錯)。它們大部分都沒有可供查詢的說明文件,而且幾乎不可能辨認。有鑑於 IE 的市場優勢,許多開發者和使用者就把 IE 所有的怪癖(包括程式錯誤)當成它的功能。
這些怪癖的本質,讓模擬 IE 變得完全不可能。因為處理編碼不良網頁的方式並沒有標準,而且若拿不到彼此的原始碼,開發者也無法寫出有同樣行為的軟體。我可以隨便舉個簡單的例子:
<b> <p><li> <font color=red>段落 <div style="position:absolute;top:10px;right:10px;color:blue"> 哇啦 </p> </font> 哇啦 </b> 哇啦 </div>
上述範例在不同的瀏覽器會得到不同結果(即使是 IE 自己的不同版本也一樣)。此外,所有軟體都有程式錯誤,難以判斷一個排版怪癖到底是意外,還是瀏覽器試圖猜想並更正網頁的錯誤。瀏覽器開發者最多只能模仿怪癖,永遠無法精確。
容錯容得太過分也不可取。Windows XP SP2 之前的電腦會有那麼多安全漏洞的理由之一,就是因為那些平台讓開發者很容易做事 - 包括不該做的事。換句話說,Windows 是容錯的作業系統。Service pack 2 引起議論紛紛可不只是因為它修復了一些東西,還因為它弄壞了一些東西(既存的軟體)。
容錯(或是回溯相容)在短期上或許可以拉攏新開發者,但是在長期來說則會付出代價。Internet Explorer 承受相同的宿命:為了「壞編碼」所設計的程式碼已經讓這瀏覽器超載,所以它的開發受阻。事實上 [BetaNews Interview|Windows Product Management 的執行長接受 BetaNews 訪談]的時候就提到,回溯相容是讓 IE 進一步開發困難重重的理由之一。
結論是,網站開發者不應該期望 Mozilla 或任何瀏覽器把編碼不良的網頁處理成「它們應該有的樣子」(這沒辦法定義),這麼做只會把網站開發者鎖在古早的技術裡。