是的,我知道特徵檢測是可取的。什麼是jquery.browser的快速,純粹的JavaScript替代(在jquery 1.9中刪除)?
我在我的代碼庫中有一個案例,我們使用$.browser.msie
和$.browser.version
來決定是否渲染一些CSS。編寫代碼的開發人員不再和我們在一起,我不完全明白我應該在這裏寫什麼樣的特徵檢測。
作爲一個快速修復,實現$ .browser.msie和$ .browser.version的最簡單方法是什麼?
是的,我知道特徵檢測是可取的。什麼是jquery.browser的快速,純粹的JavaScript替代(在jquery 1.9中刪除)?
我在我的代碼庫中有一個案例,我們使用$.browser.msie
和$.browser.version
來決定是否渲染一些CSS。編寫代碼的開發人員不再和我們在一起,我不完全明白我應該在這裏寫什麼樣的特徵檢測。
作爲一個快速修復,實現$ .browser.msie和$ .browser.version的最簡單方法是什麼?
我只是將代碼從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;
})();
使用conditional comments代替JavaScript。
<!--[if lte IE 7]>
<link rel="stylesheet" href="ie.css" type="text/css">
<![endif]-->
謝謝,與我無關,我需要一個純JavaScript解決方案(開發一個JavaScript插件到第三方網站) – ripper234
@ ripper234請參閱http://stackoverflow.com/questions/5653788/is-there-a-way-to-引進互聯網資源管理器,有條件的意見,使用,javascr –
速戰速決因此腳本不會打破,直到它的正確重構(如果需要其他版本中添加條件註釋):
<!--[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]-->
JQuery發佈了一個Migrate plugin,與1.9一起使用時可恢復$ .browser。只要確保在生產服務器上使用生產版本的Migrate。開發版本將生成一堆控制檯消息,告訴你代碼在1.9 sans Migrate中的破解位置。
但是,使用JQuery Migrate恢復$ .browser可能不是最佳的長期解決方案。顧名思義,它的目的是作爲一個過渡工具,我不知道它的瀏覽器檢測功能將會被主動維護。另一種方法是Modernizr。
我個人將要做的是暫時將我的生產站點保留在JQ 1.8上,並使用我開發機器上的Migrate開發版進行測試,以更好地瞭解1.9將會中斷(他們做了什麼不僅僅是刪除$ .browser),然後再決定升級策略。
最簡單的選擇不是升級jQuery嗎?那麼你根本不需要改變任何東西。 –
爲什麼你需要檢測瀏覽器呢?您可以使用'modernizr'代替功能檢測來代替瀏覽器檢測。 –
@JamesAllardice - 我們正在開發一個擴展,我們的客戶可以選擇他們想要的任何jQuery版本。 – ripper234