谁能告诉我,我认为jQuery的$.browser已经被弃用了,这是对的吗?
我现有的实现会继续工作吗?如果不是,是否有一个易于实现的替代方案。
发布于 2012-03-10 01:18:36
来自the documentation
$.browser属性在jQuery 1.3中已被弃用,其功能可能会在jQuery的未来版本中移至团队支持的插件中。
所以,是的,它被弃用了,但您现有的实现将继续工作。如果删除了该功能,则很可能使用插件即可轻松访问。
至于是否有其他选择。答案是“是的,很可能”。使用$.support进行功能检测比使用浏览器检测要好得多:检测您需要的实际功能,而不是提供它的浏览器。在不同的浏览器中,最重要的特性都会被检测出来。
更新2013年2月16日:在jQuery 1.9中,此功能已被删除(docs)。最好不要使用它。如果你真的,真的需要使用它的功能,你可以用jQuery Migrate插件恢复它。
发布于 2013-01-21 09:10:36
第二个问题
我现有的实现会继续工作吗?如果不是,是否有一个易于实现的替代方案。
答案是是,但不是没有一点工作。
$.browser是一个官方插件,它包含在旧版本的jQuery中,所以像任何插件一样,您可以简单地复制它并将其合并到您的项目中,也可以简单地将其添加到任何jQuery版本的末尾。
我已经为你提取了代码,以防你想要使用它。
// 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;
jQuery.sub = function() {
function jQuerySub( selector, context ) {
return new jQuerySub.fn.init( selector, context );
}
jQuery.extend( true, jQuerySub, this );
jQuerySub.superclass = this;
jQuerySub.fn = jQuerySub.prototype = this();
jQuerySub.fn.constructor = jQuerySub;
jQuerySub.sub = this.sub;
jQuerySub.fn.init = function init( selector, context ) {
if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
context = jQuerySub( context );
}
return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
};
jQuerySub.fn.init.prototype = jQuerySub.fn;
var rootjQuerySub = jQuerySub(document);
return jQuerySub;
};
})();如果你问为什么有人需要一个折旧的插件,我已经准备好了以下答案。
首先也是最重要的答案是兼容性。由于jQuery是基于插件的,一些开发人员选择使用$.browser和jQuery的最新版本,该版本不包括$.browser,所有这些插件都是无用的。
jQuery确实发布了一个migration plugin,它是为开发人员创建的,用于检测他们的插件是否使用了任何折旧的依赖项,如$.browser。
尽管这有助于开发人员修补他们的插件,但jQuery完全放弃了$.browser,所以在您的开发人员修补或整合以上内容之前,上述修复可能是唯一的解决方案。
关于: jQuery.browser
发布于 2013-09-13 00:29:47
在这里,我提出了一种基于功能可用性来检测浏览器的替代方法。
要仅检测IE,可以使用以下命令:
if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
//You are using IE>=4 (unreliable for IE11)
}
else
{
//You are using other browser
}要检测最流行的浏览器:
if(/*@cc_on!@*/false || typeof ScriptEngineMajorVersion === "function")
{
//You are using IE >= 4 (unreliable for IE11!!!)
}
else if(window.chrome)
{
//You are using Chrome or Chromium
}
else if(window.opera)
{
//You are using Opera >= 9.2
}
else if('MozBoxSizing' in document.body.style)
{
//You are using Firefox or Firefox based >= 3.2
}
else if({}.toString.call(window.HTMLElement).indexOf('Constructor')+1)
{
//You are using Safari >= 3.1
}
else
{
//Unknown
}此答案已更新,因为IE11不再支持条件编译( /*@cc_on!@*/false技巧)。
有关此主题的更多信息,请查看Did IE11 remove javascript conditional compilation?。
我使用了他们在那里提出的建议。
或者,您可以使用typeof document.body.style.msTransform == "string"或document.body.style.msTransform !== window.undefined,甚至'msTransform' in document.body.style。
https://stackoverflow.com/questions/9638247
复制相似问题