2009-03-02 95 views
1

我最近看到一些關於避免編碼到特定瀏覽器而不是使用功能/錯誤檢測的信息。看起來,jQuery的創建者John Resig似乎是功能/ bug檢測的忠實粉絲(他有一個很好的演講,其中包括關於YUI Theater的討論)。我很好奇人們是否發現這種方法在實踐中有意義?如果在當前版本的瀏覽器中這個bug不再存在(這是一個IE6問題,但不是7或8)?瀏覽器版本或錯誤檢測

回答

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」一書很好地指出了原因的細節。

+0

有趣的隱喻 – alex 2009-03-02 02:30:36

3

如果在當前版本的瀏覽器(這是一個IE6問題,但不是7或8)中不再存在該錯誤怎麼辦?

這就是功能/錯誤檢測的要點。如果瀏覽器更新其功能或修復錯誤,那麼功能/錯誤檢測代碼已經是最新的。另一方面,如果您正在瀏覽器瀏覽器中,則每次瀏覽器的功能發生變化時都必須更改代碼。