检测jQuery不支持的浏览器(2)

前端之家收集整理的这篇文章主要介绍了检测jQuery不支持的浏览器(2)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
原谅我,如果这个问题有一个明显的答案,但我没有找到它。我正在考虑切换到jQuery 2,虽然我不担心支持旧的浏览器,但我想能够告诉用户不支持的浏览器,他们不能使用该网站。

我看到这里(http://blog.jquery.com/2013/03/01/jquery-2-0-beta-2-released/),你可以使用条件注释来分支.Js文件在不同版本的IE,但我相信jQuery 2.0还支持一些其他浏览器,不只是IE,所以我不认为单独做[编辑:这是错误的,看下面更大的编辑]。

在一个理想的世界中,我会切换到jQuery 2,然后在jQuery告诉我不支持浏览器时调用一个javascript函数。有没有一个简单的做法,我失踪了?

谢谢。

编辑:

我发现这篇文章(http://bugs.jquery.com/ticket/13404)导致我在这里:http://jquery.com/browser-support/.事实证明,在支持方面,jQuery 2只不同于IE浏览器上的jQuery 1.9。因此,也许一个更好的问题是如何检测jQuery不支持的浏览器(通常不仅仅是版本2) – 我已经更新了问题标题

EDIT2:

由于功能检测是对此问题最为推荐的方法,因此jQuery支持方法在此类似(http://api.jquery.com/jQuery.support/)。但是,它似乎依然依赖(因为它可以改变,恕不另行通知)。

我想这是一个关键问题。我应该知道什么jQuery功能是或不受旧浏览器潜在的不支持?例如,如果有人用Firefox的4版本的旧版本来访问该网站,我不知道我需要测试哪些功能。如果jQuery可以提供某种完全支持功能测试,那就是ace,就像HTML5:http://html5test.com/一样

EDIT3:

好的,有条件的include语句(在下面的答案中,在jQuery的网站上突出显示),你可以处理旧版本的IE。然而,对于其他浏览器来说,这有点棘手。既然你不能依靠jQuery来告诉你有关浏览器对函数x,y或z的支持,我的方法只是查询底层的javascript。如果要查询基于CSS的支持,可以使用modernizr。对于基于javascript的支持,这是我用来检测其他浏览器的旧版本的方法

function browser_ok() {

    if  (
            ( !Array.prototype.indexOf ) ||
            ( !Array.prototype.forEach ) ||
            ( !String.prototype.indexOf ) ||
            ( !String.prototype.trim ) ||                
            ( !Function.prototype.bind ) ||
            ( !Object.keys ) ||
            ( !Object.create ) ||
            ( !JSON ) ||
            ( !JSON.stringify ) ||
            ( !JSON.stringify.length ) ||
            ( JSON.stringify.length < 3 )
        )
    {
        return false;
    }

    // # local storage support
    // source: http://diveintohtml5.info/storage.html

    try {
        var local_storage_support = ( 'localStorage' in window && window['localStorage'] !== null );
        if ( !local_storage_support ) {
            throw new Error("local_storage_support: Failed");
        }
    }
    catch ( e ) {
        return false;
    }

    // # AJAX uploads

    if ( !window.FormData || !window.FileReader ) {
        return false;
    }

    // # HTML data elements

    var body = $("body");
    body.data("browser_support_test",42);
    if ( body.data("browser_support_test") !== 42 ) {
        return false;
    }
    else {
        body.removeData("browser_support_test");
    }

    return true;
}

AFAICT,这个功能应该消除所有可能给jQuery的基本功能麻烦的浏览器。如果你想做任何事情,那么你可能需要一个特定的功能,你知道你需要的,所以你可以检查它具体。

解决方法

它似乎只是支持IE 6,7和8 – 你应该可以使用:

HTML:

<!--[if lt IE 9]> <html data-browser="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->

JS:

if( document.documentElement.getAttribute('data-browser') !== null ){
    // not supported by jQuery 2.x
}

如果您决定支持旧版浏览器,但仍希望改进jQuery团队已经包含在2.x中,那么您可以使用1.x版本:http://jquery.com/download/

更新:

检测不支持jQuery的每个浏览器都很难/不切实际,原因是jQuery只是一个javascript库。

不同的浏览器和版本用于使用不同的方法在javascript(如ajax)中做一些基本的事情,这意味着一些旧的浏览器将支持一些功能,并且不支持其他功能。此浏览器不支持所有功能,该浏览器不支持任何功能测试。

Rob W的建议非常好,将新版本(2.x)用于现代浏览器和1.x版本(具有旧版支持)到旧版浏览器。

看看这篇文章Graceful degradation versus progressive enhancement,考虑使用Modernizr库。这可以让您检查用户浏览器支持哪些功能,并允许您编写应用程序以充分利用最新进展,同时为旧版浏览器的用户提供良好的体验。

猜你在找的jQuery相关文章