我正在更新一个引用$.browser.msie的旧项目。迁移到jQuery 1.9当然会打破这一点。
如何重写此代码以获得相同的布尔值而不必包含 jQuery Migrate?
该代码深埋在我们使用的旧 javascript 库中,该库需要确定 msie 是否正在运行,然后处理该知识。我们宁愿不要过多地编辑 javascript,因为它很脆弱。
我正在更新一个引用$.browser.msie的旧项目。迁移到jQuery 1.9当然会打破这一点。
如何重写此代码以获得相同的布尔值而不必包含 jQuery Migrate?
该代码深埋在我们使用的旧 javascript 库中,该库需要确定 msie 是否正在运行,然后处理该知识。我们宁愿不要过多地编辑 javascript,因为它很脆弱。
您可以考虑包含 jQuery 1.8 中的相关代码(https://github.com/jquery/jquery/blob/1.8.3/src/deprecated.js:
(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;
})();
jQuery.browser() 方法自 jQuery 1.3 以来已被弃用,并在 1.9 中被删除。如果需要,它可以作为jQuery Migrate 插件的一部分使用。
如果你真的需要这样做。有一种 hacky、丑陋且相当轻松的方法:将其放入您的 HTML 中。它会为你设置 $.browser.msie。
检测除 IE10 以外的 IE:
<!--[if IE]>
<script type="text/javascript">
$(function(){
if(!$.browser && !$.browser.msie) { $.browser = {}; }
else { return; }
$.browser.msie = true;
});
</script>
<![endif]-->
检测所有 IE,包括 IE10
<!--[if IE]>
<script type="text/javascript">
$(function(){
$('body').addClass('msie');
});
</script>
<![endif]-->
<script type="text/javascript">
$(function(){
var $body = $('body');
// use this only if you need to detect IE10
if (Function('/*@cc_on return document.documentMode===10@*/')()){
$body.addClass('msie');
}
if($body.hasClass('msie')) {
if(!$.browser && !$.browser.msie) { $.browser = {}; }
else { return; }
$.browser.msie = true;
}
});
</script>