【发布时间】:2010-10-13 07:03:33
【问题描述】:
Amazon.com 最近更新了他们的 javascript,这导致一些 Opera 浏览器出现问题。
他们的浏览器检测代码看起来像这样,但它是错误的:
function sitbReaderIsCompatibleBrowser() {
if (typeof(jQuery) == 'undefined') {
return false;
} else {
var version = jQuery.browser.version || "0";
var splitVersion = version.split('.');
return (
(jQuery.browser.msie && splitVersion[0] >= 6) // IE 6 and higher
|| (jQuery.browser.mozilla && (
(splitVersion[0] == 1 && splitVersion[1] >= 8) // Firefox 2 and higher
|| (splitVersion[0] >= 2)
))
|| (jQuery.browser.safari && splitVersion[0] >= 500) // Safari 5 and higher
|| (jQuery.browser.opera && splitVersion[0] >= 9) // Opera 5 and higher
);
}
}
显然没有什么错误的代码在我身上跳出来,但我以前从未使用过 jQuery,所以我不知道。
尽管这段代码看起来像是试图让 Opera 用户通过,但当我使用 Opera 9.64 访问该页面时,我会收到“不支持的浏览器”消息。如果我更改 Opera 的设置以报告自己为 Firefox,则该页面可以完美运行!考虑到这一点,我很确定这是脚本而不是浏览器的问题。
有 jQuery 专家有什么建议吗?
您可以通过访问亚马逊上的任何书籍并单击“查看本书内部”链接来复制该行为。
【问题讨论】:
-
我也在使用 Opera 9.64,但该页面告诉我的是亚马逊在线阅读器最适合 IE > 6.0、Firefox > 1.5 或 Safari > 2.0
-
一个很好的例子,说明为什么浏览器检测和“不支持的浏览器”消息几乎总是一个糟糕的想法。
-
好吧,this 特定的 sn-p 嗅探确实试图允许 Opera,但正如下面的答案之一所说,亚马逊在其他地方有更多的浏览器嗅探,包括服务器端嗅探,这对 Opera 不友好。
标签: javascript jquery opera browser-detection