我看到这里(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的基本功能麻烦的浏览器。如果你想做任何事情,那么你可能需要一个特定的功能,你知道你需要的,所以你可以检查它具体。
解决方法
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库。这可以让您检查用户浏览器支持哪些功能,并允许您编写应用程序以充分利用最新进展,同时为旧版浏览器的用户提供良好的体验。