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

如果对这个问题有明显的答案,请原谅我,但我找不到它。 我正在考虑切换到jQuery 2,虽然我不关心支持旧浏览器,但我希望能够告诉用户使用不受支持的浏览器他们无法使用该网站。

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

在理想的世界中,我将切换到jQuery 2,然后在jQuery告诉我它不支持浏览器时调用一个javascript函数。 这样做是否有一种直截了当的方式我错过了?

谢谢。

编辑:

我遇到了这篇文章( http://bugs.jquery.com/ticket/13404 ),它指示我: http : //jquery.com/browser-support/ 。 事实certificate,就支持而言,jQuery 2仅与IE浏览器上的jQuery 1.9不同。 因此,或许更好的问题是如何检测jQuery不支持的浏览器(通常,不仅仅是版本2) – 我更新了问题标题。

EDIT2:

由于特征检测是此问题的最佳推荐方法,因此jQuery支持方法在此处相关( http://api.jquery.com/jQuery.support/ )。 然而,依赖它似乎也很不可思议(因为它可以在没有通知的情况下改变)。

我认为这会产生关键问题。 我怎么知道jQuery的function是什么或不受旧浏览器的潜在不支持? 例如,如果有人使用4版本的Firefox副本访问该网站,我就不知道我需要测试哪些function。 如果jQuery可以提供某种完全支持的function测试,就像这样对于HTML5: http : //html5test.com/

EDIT3:

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

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带来基本function麻烦的浏览器。 如果你想做任何奇特的事情,那么你可能需要一些特定的function,所以你可以专门检查它。

看起来它只是放弃了对IE 6,7和8的支持 – 你应该可以使用:

HTML:

     

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)中做一些基本的东西,这意味着一些旧的浏览器会支持某些function而不支持其他function。 没有直接这个浏览器支持所有function或者这个浏览器不支持任何function测试。

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

看看这篇文章: 优雅降级与渐进增强,并考虑使用Modernizr库。 这使您可以检查用户的浏览器支持哪些function,并允许您编写应用程序以充分利用最新的改进,同时仍然为旧浏览器的用户提供良好的体验。

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

    
  • 第一个条件注释确保为IE <9加载jQuery 1.x.
  • 最新版本的jQuery(2.0.3)用于IE 9和浏览器中,其中无法识别条件注释(IE 10不再支持条件注释)。
  • 当jQuery无法从CDN加载时,会加载回退( jquery.js ,托管在您的服务器上)。