如果对这个问题有明显的答案,请原谅我,但我还没能找到它。我正在考虑转换到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/。事实证明,就支持而言,jQuery 2仅与IE浏览器上的jQuery 1.9不同。因此,或许更好的问题是如何检测jQuery不支持的浏览器(通常,不仅仅是版本2) - 我已经更新了问题标题。
EDIT2:
由于特征检测是此问题最常推荐的方法,因此jQuery支持方法在此处看起来很相关(http://api.jquery.com/jQuery.support/)。然而,依赖它似乎也很不合理(因为它可以在不事先通知的情况下改变)。
我认为这会产生关键问题。 我怎么知道jQuery的功能是什么或者不受旧浏览器的潜在不支持?例如,如果有人带着4版本的旧版本访问该网站Firefox,我不会任何想法我需要测试哪些功能。如果jQuery可以为HTML5提供某种完全支持的功能测试,那将是一件好事:http://html5test.com/
EDIT3:
好的,使用条件包含语句(在下面的答案和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带来麻烦的浏览器。如果你想做任何奇特的事情,那么你可能知道自己需要的特定功能,所以你可以专门检查它。
答案 0 :(得分:9)
在支持IE 6,7和8的同时获得jQuery 2.0优势的一种方法是使用条件注释:
<!--[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>
jquery.js
)。答案 1 :(得分:7)
看起来它只是放弃了对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库。这使您可以检查用户浏览器支持的功能,并允许您编写应用程序以充分利用最新进展,同时仍为旧浏览器的用户提供良好的体验。