2013-01-17 17 views
5

是的,我知道特徵檢測是可取的。什麼是jquery.browser的快速,純粹的JavaScript替代(在jquery 1.9中刪除)?

我在我的代碼庫中有一個案例,我們使用$.browser.msie$.browser.version來決定是否渲染一些CSS。編寫代碼的開發人員不再和我們在一起,我不完全明白我應該在這裏寫什麼樣的特徵檢測。

作爲一個快速修復,實現$ .browser.msie和$ .browser.version的最簡單方法是什麼?

+1

最簡單的選擇不是升級jQuery嗎?那麼你根本不需要改變任何東西。 –

+0

爲什麼你需要檢測瀏覽器呢?您可以使用'modernizr'代替功能檢測來代替瀏覽器檢測。 –

+0

@JamesAllardice - 我們正在開發一個擴展,我們的客戶可以選擇他們想要的任何jQuery版本。 – ripper234

回答

11

我只是將代碼從jQuery 1.8.3複製。

// Limit scope pollution from any deprecated API 
(function() { 

var matched, browser; 

// Use of jQuery.browser is frowned upon. 
// More details: http://api.jquery.com/jQuery.browser 
// jQuery.uaMatch maintained for back-compat 
jQuery.uaMatch = function(ua) { 
    ua = ua.toLowerCase(); 

    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || 
     /(webkit)[ \/]([\w.]+)/.exec(ua) || 
     /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || 
     /(msie) ([\w.]+)/.exec(ua) || 
     ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || 
     []; 

    return { 
     browser: match[ 1 ] || "", 
     version: match[ 2 ] || "0" 
    }; 
}; 

matched = jQuery.uaMatch(navigator.userAgent); 
browser = {}; 

if (matched.browser) { 
    browser[ matched.browser ] = true; 
    browser.version = matched.version; 
} 

// Chrome is Webkit, but Webkit is also Safari. 
if (browser.chrome) { 
    browser.webkit = true; 
} else if (browser.webkit) { 
    browser.safari = true; 
} 

jQuery.browser = browser; 
})(); 
4

使用conditional comments代替JavaScript。

<!--[if lte IE 7]> 
<link rel="stylesheet" href="ie.css" type="text/css"> 
<![endif]--> 
+0

謝謝,與我無關,我需要一個純JavaScript解決方案(開發一個JavaScript插件到第三方網站) – ripper234

+1

@ ripper234請參閱http://stackoverflow.com/questions/5653788/is-there-a-way-to-引進互聯網資源管理器,有條件的意見,使用,javascr –

1

速戰速決因此腳本不會打破,直到它的正確重構(如果需要其他版本中添加條件註釋):

<!--[if IE 7]> 
<script> if(typeof $!== typeof undefined){ $.browser = { msie : true, version : 7 }} </script> 
<![endif]--> 
<!--[if IE 8]> 
<script> if(typeof $!== typeof undefined){ $.browser = { msie : true, version : 8 }} </script> 
<![endif]--> 
1

JQuery發佈了一個Migrate plugin,與1.9一起使用時可恢復$ .browser。只要確保在生產服務器上使用生產版本的Migrate。開發版本將生成一堆控制檯消息,告訴你代碼在1.9 sans Migrate中的破解位置。

但是,使用JQuery Migrate恢復$ .browser可能不是最佳的長期解決方案。顧名思義,它的目的是作爲一個過渡工具,我不知道它的瀏覽器檢測功能將會被主動維護。另一種方法是Modernizr

我個人將要做的是暫時將我的生產站點保留在JQ 1.8上,並使用我開發機器上的Migrate開發版進行測試,以更好地瞭解1.9將會中斷(他們做了什麼不僅僅是刪除$ .browser),然後再決定升級策略。