2013-02-21 82 views
1

當.NET MVC 3中的以下代碼返回「Opera 12」或「Opera 11」時,它會在多臺機器上確認此消息,Win 7 64位和XP 32位。.NET Request.Browser錯誤地標識Opera版本

​​3210

由於某些原因,Opera的瀏覽器標籤有9.8個,實際版本號爲最後。
Opera Help...About

這是Opera的過錯格式瀏覽器標籤錯誤,或HttpBrowserCapabilitiesBase類的故障解析它錯了嗎?

+2

用戶代理很容易被欺騙和不準確。也許你應該考慮功能檢測。但我可以確認它也會爲我返回Opera 9。 – Sashenka 2013-02-21 16:34:45

+0

什麼是'Request.Browser.MinorVersion'返回? – 2013-02-21 16:44:30

+0

@DanielHilgarth MinorVersion正在返回80 – 2013-02-21 16:48:38

回答

1

我發現這解釋了Opera的用戶代理字符串,以及爲什麼Opera/9.80現在在用戶代理字符串內硬編碼。

http://my.opera.com/community/openweb/idopera/

就像我在我的評論說,這可能會更好看功能檢測,因爲你可能有同樣的問題與IE 10很快。

編輯:一種解決方案可能是自己解析用戶代理字符串。

編輯2:如果你想瀏覽器檢測,有Modernizr Javascript庫(http://modernizr.com/),它做了一個很好的工作。

1

根據我的經驗,正確的版本(假設它不是欺騙性的用戶代理字符串)始終是最後一個斜槓後面顯示的版本。因此刪除前面的所有內容(包括最後一個斜槓),其餘部分將成爲您的當前版本。

1

@Sashenka:正如你所指出的那樣,Opera字符串的硬盤部分是需要的。如果出於類似的原因,其他瀏覽器不需要類似的想法,我也不會感到驚訝。然而,功能檢測只是蠕蟲等待你在後面的字節的另一罐。例如,每一個IE版本都會改​​變他們處理事物的方式;即,你根本不能相信M $。解析用戶代理字符串並不是那麼困難,幾乎可以保證成功。所有這些,我想知道爲標準編寫代碼是否容易,要求包括IE繃帶,並讓每個瀏覽器按照設計者的意圖展示頁面;好,壞或無動於衷! :-)

+0

Opera說:「Opera/9.80被硬編碼在用戶代理字符串的開頭,因爲檢測到」Opera/10「及其以上版本爲Opera 1的瀏覽器嗅探腳本崩潰」所以現在我們有了修復破碎的依賴關係的竅門,這造成了更多的中斷依賴關係。現在是一個循環問題:( – 2013-02-21 17:16:46

+0

我仍然認爲功能檢測可能比瀏覽器檢測更具前瞻性,如果MS使用IE或修補程序發佈時會發生某些問題,您仍然會檢測到相同版本的IE,但沒有該功能您已經習慣了。還有Modernizr JavaScript庫(http://modernizr.com/),它可以幫助您輕鬆檢測訪問您的網站的瀏覽器支持的內容。 – Sashenka 2013-02-21 18:17:50