【发布时间】:2013-08-06 17:59:00
【问题描述】:
如果这个问题有明显的答案,请原谅我,但我一直没能找到。我正在考虑切换到 jQuery 2,虽然我不关心支持旧版浏览器,但我希望能够告诉使用不受支持的浏览器的用户他们不能使用该网站。
我在这里 (http://blog.jquery.com/2013/03/01/jquery-2-0-beta-2-released/) 看到您可以使用条件 cmets 在不同版本的 IE 上分支 .js 文件,但我相信 jQuery 2.0 也会放弃对许多其他浏览器的支持,而不仅仅是 IE,所以我不支持'认为这不会单独完成[编辑:这是错误的,请参阅下面的更大编辑]。
在理想情况下,我会切换到 jQuery 2,然后拥有一个 javascript 函数,当 jQuery 告诉我它不支持浏览器时调用该函数。有没有我想念的直接方法?
谢谢。
编辑:
我看到了这篇文章 (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 的支持,这是我用来检测其他浏览器的 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 的基本功能带来麻烦的浏览器。如果您想做任何花哨的事情,那么您可能需要某个特定的功能,因此您可以专门检查它。
【问题讨论】:
-
jQuery 不支持是什么意思? asin,图书馆的任何部分绝对不能在所述浏览器中工作?这是一个相当高的要求,我怀疑大多数(如果不是所有)浏览器都以某种方式与 jQuery 的某些部分一起使用。如果你想逐个分解它,那将需要相当多的代码来检测 jquery 的功能是否可以在所述浏览器中工作。
标签: jquery jquery-2.0