首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测jQuery不支持的浏览器(2)

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

Stack Overflow用户
提问于 2013-08-06 17:59:00
回答 2查看 11.8K关注 0票数 16

如果这个问题有一个明显的答案,请原谅我,但我还没有找到。我正在考虑切换到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特性,或者不受旧浏览器的潜在不支持?例如,如果有人带着一个4版本的火狐版本来到这个网站,我就不知道我需要测试什么特性。如果jQuery能够提供某种完全支持的特性测试,比如HTML5:http://html5test.com/,那就太棒了。

EDIT3:

好的,使用条件包含语句(在下面的答案中突出显示,并在jQuery的站点上突出显示),您可以处理IE的旧版本。然而,对于其他浏览器来说,这有点棘手。由于不能依赖jQuery告诉您浏览器对函数x、y或z的支持,所以我的方法只是查询底层的javascript。如果您想要查询基于CSS的支持,可以使用现代化。对于基于javascript的支持,这是我用来检测其他浏览器的超级老版本的方法:

代码语言: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的基本功能带来麻烦的浏览器。如果您想做任何花哨的事情,那么可能有一个您知道自己需要的特定功能,所以您可以专门检查它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-06 18:05:06

看起来它只是放弃了对IE6、7和8的支持--您应该能够使用:

HTML:

代码语言:javascript
复制
<!--[if lt IE 9]> <html data-browser="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->

联署材料:

代码语言:javascript
复制
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的建议真的很好,为现代浏览器提供新版本(2.x),为旧浏览器提供1.x版本(有遗留支持)。

看一看本文:优雅退化与渐进增强,并考虑使用现代派库。这允许您检查用户的浏览器支持哪些功能,并允许您编写应用程序以充分利用最新的进步,同时仍然为老浏览器的用户提供良好的体验。

票数 7
EN

Stack Overflow用户

发布于 2013-08-06 19:20:11

在支持IE6、7和8的同时获得jQuery 2.0好处的一种方法是使用条件注释:

代码语言:javascript
复制
<!--[if lt IE 9]><script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script><![endif]-->
<!--[if IE 9]><!--><script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script><!--<![endif]-->
<script>window.jQuery||document.write('<script src="jquery.js"><\/script>');</script>
  • 第一个条件注释确保为IE < 9加载jQuery 1.x。
  • 最新版本的jQuery (2.0.3)用于IE9和不承认条件注释的浏览器(IE 10不再支持条件注释)。
  • 当jQuery无法从CDN加载时,将加载一个后备(托管在您的服务器上的jquery.js)。
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18087207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档