jQuery 1.9浏览器检测

在早期版本中,我曾经测试过是否应该在页面加载时手动触发popstate ,因为Chrome会在加载后立即触发,而Firefox和IE则不会。

 if ($.browser.mozilla || $.browser.msie) { $(window).trigger('popstate'); } 

现在他们在1.9中删除了浏览器对象,我应该如何测试这些浏览器? 或者我如何计算是否需要在页面加载时使用popstate

代码是:

 $(function(){ $(window).on('popstate', popState); // manual trigger loads template by URL in FF/IE. if ($.browser.mozilla || $.browser.msie) { $(window).trigger('popstate'); } }); 

更新

去了这个:

  function popState(e){ var initial = e.originalEvent === undefined || e.originalEvent.state === null; if(!initial){ activateRoute({ key: e.originalEvent.state.key, settings: e.originalEvent.state.settings },'replace'); } } function init(){ $(window).on('popstate', popState); $(function(){ var route = getRoute(document.location.pathname); activateRoute(route, 'replace'); }); } 

你应该给你的popstate处理程序添加一点健全性检查,如果你“弹出”到你开始的相同状态,确保它没有做任何昂贵的事情。那么你不关心浏览器,而只是打电话给你popstate on document ready:

 $(function(){ $(window).on('popstate', popState); // call popstate on document ready $(popstate); }); 

答案建议您将$.browser的代码粘贴回您的环境中,这对于支持不良做法是一种过度的做法。 您可以检测99%的所需内容。 几乎每次使用$.browser都是危险的。 几乎总有办法检测到这一点。

JavaScript社区长期以来一直反对浏览器嗅探。 这是2009年的一篇文章,告诉我们为什么这是一个坏主意。 还有很多其他的。

我请求你不要将$.browser复制回你的代码中,jQuery团队决定将其$.browser是有原因的。

这是解决这个问题的快捷方法。 将这行代码添加到jQuery-1.9.js并用jQuery.browser替换$ .browser

 jQuery.browser = {}; jQuery.browser.mozilla = /mozilla/.test(navigator.userAgent.toLowerCase()) && !/webkit /.test(navigator.userAgent.toLowerCase()); jQuery.browser.webkit = /webkit/.test(navigator.userAgent.toLowerCase()); jQuery.browser.opera = /opera/.test(navigator.userAgent.toLowerCase()); jQuery.browser.msie = /msie/.test(navigator.userAgent.toLowerCase()); 

这里

我想把这段代码放到你身边就可以了。 如果您需要,请不要忘记进行更改。

 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文档

我们建议不要使用此属性; 请尝试使用function检测(请参阅jQuery.support)。 jQuery.browser可能会在未来的jQuery版本中移动到插件中。

jQuery.browser

jQuery.support

如果你想要https://github.com/jquery/jquery-migrate/#readme,这个链接就可以了