我最近看到一些關於避免編碼到特定瀏覽器而不是使用功能/錯誤檢測的信息。看起來,jQuery的創建者John Resig似乎是功能/ bug檢測的忠實粉絲(他有一個很好的演講,其中包括關於YUI Theater的討論)。我很好奇人們是否發現這種方法在實踐中有意義?如果在當前版本的瀏覽器中這個bug不再存在(這是一個IE6問題,但不是7或8)?瀏覽器版本或錯誤檢測
1
A
回答
9
對象檢測的最大優點是您只能使用客戶端瀏覽器可用的對象和功能。換句話說,給出以下代碼:
if (document.getFoo) {
// always put getFoo in here
} else {
// browsers who don't support getFoo go here
}
允許您清除瀏覽器而不命名名稱。這很酷的原因是因爲只要瀏覽器支持getFoo
你不必擔心它是哪一個。這意味着您可能實際上支持您從未聽說過的瀏覽器。如果您的目標用戶代理字符串找到瀏覽器,那麼您只能支持您認識的瀏覽器。
此外,如果之前不支持getFoo
的瀏覽器獲取該程序併發布新版本,則無需更改代碼,以允許新瀏覽器利用更好的代碼。
0
那麼,如果它是IE 6中的問題,但不是IE 7或IE 8,那麼功能/錯誤檢測機制將標記爲不成問題並使用適當的功能。
它在實踐中很有意義,瀏覽器嗅探會導致很多問題,如果您沒有及時更新某個發佈的新瀏覽器的簽名,該怎麼辦?您現在鎖定了潛在客戶和訪問者,因爲您認爲他們的瀏覽器無法支持其確實可以實現的功能。
所以是的,它是有道理的,你的第二個問題是沒有意義的,因爲它首先做了檢測,如果它不再是一個bug,那麼一切都將按預期工作,沒有解決的工作如果錯誤在那裏,請放置!
1
版本和用戶代理解析使我想起了刻板印象或種族分析。在我看來,物體檢測是一種方法。 「jQuery in Action」一書很好地指出了原因的細節。
3
如果在當前版本的瀏覽器(這是一個IE6問題,但不是7或8)中不再存在該錯誤怎麼辦?
這就是功能/錯誤檢測的要點。如果瀏覽器更新其功能或修復錯誤,那麼功能/錯誤檢測代碼已經是最新的。另一方面,如果您正在瀏覽器瀏覽器中,則每次瀏覽器的功能發生變化時都必須更改代碼。
有趣的隱喻 – alex 2009-03-02 02:30:36