在早期版本中,我用于测试是否我应该触发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在文件准备:
$(function(){
$(window).on('popstate', popState);
// call popstate on document ready
$(popstate);
});
答案建议你从粘贴代码$.browser
回到你的环境是矫枉过正的方式来支持一种不好的做法。 你可以拥有检测你需要的东西99%。 几乎每一个使用$.browser
是一个危险的。 几乎总有办法来检测。
JavaScript社区已经对浏览器嗅探很长一段时间。 这是自2009年后告诉我们为什么这是一个坏主意。 还有许多其他问题。
我求你不要复制$.browser
回你的代码,jQuery开发团队决定杀死这是有原因的。
这是解决这个问题的一个快速方法。 这行代码添加到您的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的文档
我们不推荐使用此属性; 请尽量使用特征检测(请参阅第jQuery.support)。 jQuery.browser可能在将来的jQuery的版本被移动到一个插件。
jQuery.browser
jQuery.support
如果您希望此链接可能eneble它https://github.com/jquery/jquery-migrate/#readme