jQuery的1.9浏览器检测(jQuery 1.9 browser detection)

2019-07-18 18:27发布

在早期版本中,我用于测试是否我应该触发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');
        });
    }

Answer 1:

你应该加一点仔细的检查,你popstate处理程序,并确保它不会做什么昂贵的东西,如果你“啪”到你开始相同的状态。然后,你可以不关心浏览器,而不是只打电话给你popstate在文件准备:

$(function(){
    $(window).on('popstate', popState);

    // call popstate on document ready
    $(popstate);
});

答案建议你从粘贴代码$.browser回到你的环境是矫枉过正的方式来支持一种不好的做法。 你可以拥有检测你需要的东西99%。 几乎每一个使用$.browser是一个危险的。 几乎总有办法来检测。

JavaScript社区已经对浏览器嗅探很长一段时间。 这是自2009年后告诉我们为什么这是一个坏主意。 还有许多其他问题。

我求你不要复制$.browser回你的代码,jQuery开发团队决定杀死这是有原因的。



Answer 2:

这是解决这个问题的一个快速方法。 这行代码添加到您的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());

这里



Answer 3:

我估计把这个代码会做的伎俩为您服务。 不要忘记,如果您需要根据您的要求进行更改。

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



Answer 4:

如果您希望此链接可能eneble它https://github.com/jquery/jquery-migrate/#readme



文章来源: jQuery 1.9 browser detection