什么是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; })();
使用条件注释而不是JavaScript。
快速修复,以便脚本在正确重构之前不会中断(如果需要,为其他版本添加条件注释):
JQuery发布了一个Migrate插件 ,当与1.9一起使用时恢复$ .browser。 请务必在生产服务器上使用Migrate的生产版本。 开发版本将生成一堆控制台消息,告诉您代码在1.9 sans Migrate中断的位置。
但是,使用JQuery Migrate恢复$ .browser可能不是最好的长期解决方案。 顾名思义,它旨在作为过渡工具,我不知道它的浏览器检测function将得到积极维护。 另一种选择是Modernizr 。
我个人将要做的是暂时将我的生产站点保留在JQ 1.8上,并在我的开发机器上使用Migrate的开发版本进行测试,以更好地了解1.9将会破坏(他们做了很多事情)在决定升级策略之前,先删除$ .browser。