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

检测jQuery不支持的浏览器(2),jquery,jquery-2.0,Jquery,Jquery 2.0,如果这个问题有一个明显的答案,请原谅我,但我还没有找到。我正在考虑切换到jquery2,尽管我不关心支持旧浏览器,但我希望能够告诉那些浏览器不受支持的用户,他们不能使用这个网站 我在这里看到(),您可以使用条件注释在不同版本的IE上分支.js文件,但我相信jQuery 2.0也放弃了对许多其他浏览器的支持,而不仅仅是IE,因此我不认为这一点可以单独做到[编辑:这是错误的,请参阅下面的较大编辑] 在理想情况下,我会切换到jQuery 2,然后在jQuery告诉我它不支持浏览器时调用一个javasc

如果这个问题有一个明显的答案,请原谅我,但我还没有找到。我正在考虑切换到jquery2,尽管我不关心支持旧浏览器,但我希望能够告诉那些浏览器不受支持的用户,他们不能使用这个网站

我在这里看到(),您可以使用条件注释在不同版本的IE上分支.js文件,但我相信jQuery 2.0也放弃了对许多其他浏览器的支持,而不仅仅是IE,因此我不认为这一点可以单独做到[编辑:这是错误的,请参阅下面的较大编辑]

在理想情况下,我会切换到jQuery 2,然后在jQuery告诉我它不支持浏览器时调用一个javascript函数。有没有一种简单的方法让我错过了

谢谢

编辑:

我偶然发现了这篇文章(),它把我引向这里:。事实证明,在支持方面,jQuery2只与IE浏览器上的jQuery1.9有所不同。因此,也许一个更好的问题是如何检测jQuery不支持的浏览器(一般来说,不只是版本2)——我已经更新了问题标题

EDIT2:

由于特性检测是解决此问题最推荐的方法,因此jQuery支持方法在这里看起来是相关的()。然而,它似乎也很难依赖(因为它可以在不通知的情况下更改)

我想这就是关键问题我怎么知道jQuery的哪些功能可能会受到旧浏览器的不支持呢?例如,如果有人带着4个版本的Firefox来到这个网站,我就不知道我需要测试哪些功能。如果jQuery能够提供某种完全受支持的功能测试,比如HTML5,那就太好了:

EDIT3:

好的,使用条件include语句(在下面的答案中以及jQuery的网站上突出显示),您可以处理旧版本的IE。但是,对于其他浏览器,这有点棘手。由于您不能依赖jQuery来告诉您有关浏览器对函数x、y或z的支持的任何信息,因此我的方法只是查询底层javascript。如果您想查询基于CSS的支持,可以使用Modernizer。对于基于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;
}
函数浏览器_ok(){
如果(
(!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)
)
{
返回false;
}
//#本地存储支持
//资料来源:http://diveintohtml5.info/storage.html
试一试{
var local_storage_support=(&window&&window['localStorage']中的'localStorage'!==null);
if(!本地存储支持){
抛出新错误(“本地存储支持:失败”);
}
}
捕获(e){
返回false;
}
//#AJAX上传
如果(!window.FormData | |!window.FileReader){
返回false;
}
//#HTML数据元素
主体变量=$(“主体”);
正文数据(“浏览器支持测试”,42);
if(body.data(“浏览器支持测试”)!==42){
返回false;
}
否则{
body.removeData(“浏览器支持测试”);
}
返回true;
}

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

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

HTML:

如果您决定支持较旧的浏览器,但仍希望得到jQuery团队在2.x中提供的改进,那么您可以使用1.x版本:

更新:

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

不同的浏览器和版本使用不同的方法在javascript(如ajax)中执行一些基本操作,这意味着一些旧浏览器将支持某些功能,而不支持其他功能。没有直接的此浏览器支持所有功能此浏览器不支持任何功能测试

Rob W的建议非常好,为现代浏览器提供新版本(2.x),为旧浏览器提供1.x版本(支持旧版本)


请看这篇文章:并考虑使用图书馆。这可以让您检查用户的浏览器支持哪些功能,并允许您编写应用程序以充分利用最新的进步,同时仍然为使用旧浏览器的用户提供良好的体验。

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


window.jQuery | | document.write(“”);
  • 第一个条件注释确保为IE<9加载jQuery 1.x
  • 最新版本的jQuery(2.0.3)用于IE 9和无法识别条件注释的浏览器(IE 10放弃了对条件注释的支持)
  • 当jQuery无法从CDN加载时,将加载回退(
    jQuery.js
    ,托管在服务器上)

你完全正确。我已编辑了原始问题并扩大了其范围。@EleventyOne-我已添加到我的答案中。我建议你也去看看Rob W的答案——可能更多的是你的答案
<!--[if lt IE 9]> <html data-browser="lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html> <!--<![endif]-->
if( document.documentElement.getAttribute('data-browser') !== null ){
    // not supported by jQuery 2.x
}
<!--[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>