jQuery$.browser是否已弃用?

jQuery$.browser是否已弃用?,jquery,browser,Jquery,Browser,有人能告诉我,我认为jQuery的$.browser已经被弃用了,这是否正确 我现有的实现还能继续工作吗?如果没有,是否有易于实施的替代方案 在jQuery 1.3中,$.browser属性已被弃用,在jQuery的未来版本中,它的功能可能会被移动到团队支持的插件中 从从: 在jQuery 1.3中,$.browser属性已被弃用,在jQuery的未来版本中,它的功能可能会移动到团队支持的插件中 因此,是的,它已被弃用,但您现有的实现将继续工作。如果删除了该功能,则可以使用插件轻松访问该功能 至

有人能告诉我,我认为jQuery的$.browser已经被弃用了,这是否正确

我现有的实现还能继续工作吗?如果没有,是否有易于实施的替代方案

在jQuery 1.3中,$.browser属性已被弃用,在jQuery的未来版本中,它的功能可能会被移动到团队支持的插件中

从:

在jQuery 1.3中,$.browser属性已被弃用,在jQuery的未来版本中,它的功能可能会移动到团队支持的插件中

因此,是的,它已被弃用,但您现有的实现将继续工作。如果删除了该功能,则可以使用插件轻松访问该功能

至于是否有其他选择。。。答案是“是的,可能”。使用而不是浏览器检测进行特征检测要好得多:检测您需要的实际特征,而不是检测提供它的浏览器。不同浏览器的大多数重要功能都是通过该功能检测到的


2013年2月16日更新:在jQuery 1.9中,此功能已被删除()。最好不要使用它。如果你真的,真的必须使用它的功能,你可以用插件恢复它。

第二个问题 我现有的实现还能继续工作吗?如果没有,是否有 易于实现的替代方案

答案是是,但不是没有一点工作

$.browser是一个官方插件,它包含在较早版本的jQuery中,因此与任何插件一样,您可以简单地复制它并将其合并到项目中,也可以简单地将其添加到任何jQuery版本的末尾

我已经为您提取了代码,以备您使用


//限制任何弃用API的作用域污染
(功能(){
变量匹配,浏览器;
//不赞成使用jQuery.browser。
//更多详情:http://api.jquery.com/jQuery.browser
//jQuery.uaMatch为后台兼容维护
jQuery.uaMatch=函数(ua){
ua=ua.toLowerCase();
变量匹配=/(chrome)[\/]([\w.]+)/.exec(ua)||
/(webkit)[\/]([\w.]+)/.exec(ua)||
/(opera)(?:.*版本|)[\/]([\w.]+)/.exec(ua)||
/(msie)([\w.]+)/.exec(ua)||
ua.indexOf(“兼容”)<0&/(mozilla)(?:.*rv:([\w.]+)/.exec(ua)||
[];
返回{
浏览器:匹配[1]| |“”,
版本:匹配[2]| |“0”
};
};
matched=jQuery.uaMatch(navigator.userAgent);
浏览器={};
如果(匹配的浏览器){
browser[matched.browser]=true;
browser.version=匹配的.version;
}
//Chrome是Webkit,但Webkit也是Safari。
如果(browser.chrome){
browser.webkit=true;
}else if(browser.webkit){
browser.safari=true;
}
jQuery.browser=浏览器;
jQuery.sub=函数(){
函数jQuerySub(选择器,上下文){
返回新的jQuerySub.fn.init(选择器,上下文);
}
extend(true,jQuerySub,this);
jQuerySub.superclass=这个;
jQuerySub.fn=jQuerySub.prototype=this();
jQuerySub.fn.constructor=jQuerySub;
jQuerySub.sub=这个.sub;
jQuerySub.fn.init=函数init(选择器,上下文){
if(jQuery的上下文和上下文实例&&!(jQuerySub的上下文实例)){
context=jQuerySub(context);
}
返回jQuery.fn.init.call(this、选择器、上下文、rootjQuerySub);
};
jQuerySub.fn.init.prototype=jQuerySub.fn;
var rootjQuerySub=jQuerySub(文档);
返回jQuerySub;
};
})();

如果你问为什么有人需要一个贬值的插件,我准备了以下答案

首先也是最重要的答案是兼容性。由于jQuery是基于插件的,一些开发人员选择使用$.browser,而jQuery的最新版本不包括$.browser,所有这些插件都是无用的

jQuery确实发布了一个版本,它是为开发人员创建的,用于检测他们的插件是否使用了任何贬值的依赖项,如$.browser

尽管这有助于开发人员修补插件。jQuery完全删除了$.browser,因此在开发人员修补或合并上述内容之前,上述修复可能是唯一的解决方案


关于:

这里我提供了一种基于功能可用性检测浏览器的替代方法

要仅检测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不再支持条件编译(http://code>/*@cc\u on!@*/false技巧)。
您可以查看有关此主题的更多信息。
我使用了他们在那里提出的建议。
或者,您可以使用
typeof document.body.style.msTransform==“string”
document.body.style.msTransform!==window.undefined
甚至是document.body.style中的
'msTransform'

更新!2015年3月24日(滚动至人力资源下方)

是绝对正确的,我只是想加上这个花絮。不久前,我提出了一种在Vanilla JS中使用浏览器的方法,并最终将其弯曲,以替换jQuery的后续版本中的
jQuery.browser
。它不干扰新jQuery库的任何部分,但提供与传统的
jQuery.browser
对象相同的功能,以及一些其他小功能


新的扩展版本

对于较新的浏览器来说更彻底。此外,移动测试的准确率达到90%以上!我不会说100%,因为我并没有在每个手机浏览器上测试过,但新功能增加了
$.browser.mobile
boolean/string。如果不是mobile,则为false,否则将是移动设备或浏览器的字符串名称(最好的猜测是:Android、RIM平板电脑、iPod等)。

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 }
/* quick & easy cut & paste */
;;(function($){if(!$.browser&&1.9<=parseFloat($.fn.jquery)){var a={browser:void 0,version:void 0,mobile:!1};navigator&&navigator.userAgent&&(a.ua=navigator.userAgent,a.webkit=/WebKit/i.test(a.ua),a.browserArray="MSIE Chrome Opera Kindle Silk BlackBerry PlayBook Android Safari Mozilla Nokia".split(" "),/Sony[^ ]*/i.test(a.ua)?a.mobile="Sony":/RIM Tablet/i.test(a.ua)?a.mobile="RIM Tablet":/BlackBerry/i.test(a.ua)?a.mobile="BlackBerry":/iPhone/i.test(a.ua)?a.mobile="iPhone":/iPad/i.test(a.ua)?a.mobile="iPad":/iPod/i.test(a.ua)?a.mobile="iPod":/Opera Mini/i.test(a.ua)?a.mobile="Opera Mini":/IEMobile/i.test(a.ua)?a.mobile="IEMobile":/BB[0-9]{1,}; Touch/i.test(a.ua)?a.mobile="BlackBerry":/Nokia/i.test(a.ua)?a.mobile="Nokia":/Android/i.test(a.ua)&&(a.mobile="Android"),/MSIE|Trident/i.test(a.ua)?(a.browser="MSIE",a.version=/MSIE/i.test(navigator.userAgent)&&0<parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,""))?parseFloat(a.ua.split("MSIE")[1].replace(/[^0-9\.]/g,"")):"Edge",/Trident/i.test(a.ua)&&/rv:([0-9]{1,}[\.0-9]{0,})/.test(a.ua)&&(a.version=parseFloat(a.ua.match(/rv:([0-9]{1,}[\.0-9]{0,})/)[1].replace(/[^0-9\.]/g,"")))):/Chrome/.test(a.ua)?(a.browser="Chrome",a.version=parseFloat(a.ua.split("Chrome/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Opera/.test(a.ua)?(a.browser="Opera",a.version=parseFloat(a.ua.split("Version/")[1].replace(/[^0-9\.]/g,""))):/Kindle|Silk|KFTT|KFOT|KFJWA|KFJWI|KFSOWI|KFTHWA|KFTHWI|KFAPWA|KFAPWI/i.test(a.ua)?(a.mobile="Kindle",/Silk/i.test(a.ua)?(a.browser="Silk",a.version=parseFloat(a.ua.split("Silk/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Kindle/i.test(a.ua)&&/Version/i.test(a.ua)&&(a.browser="Kindle",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,"")))):/BlackBerry/.test(a.ua)?(a.browser="BlackBerry",a.version=parseFloat(a.ua.split("/")[1].replace(/[^0-9\.]/g,""))):/PlayBook/.test(a.ua)?(a.browser="PlayBook",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/BB[0-9]{1,}; Touch/.test(a.ua)?(a.browser="Blackberry",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Android/.test(a.ua)?(a.browser="Android",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Safari/.test(a.ua)?(a.browser="Safari",a.version=parseFloat(a.ua.split("Version/")[1].split("Safari")[0].replace(/[^0-9\.]/g,""))):/Firefox/.test(a.ua)?(a.browser="Mozilla",a.version=parseFloat(a.ua.split("Firefox/")[1].replace(/[^0-9\.]/g,""))):/Nokia/.test(a.ua)&&(a.browser="Nokia",a.version=parseFloat(a.ua.split("Browser")[1].replace(/[^0-9\.]/g,""))));if(a.browser)for(var b in a.browserArray)a[a.browserArray[b].toLowerCase()]=a.browser==a.browserArray[b];$.extend(!0,$.browser={},a)}})(jQuery);
/* quick & easy cut & paste */