15

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 专家有建议吗?

您可以通过访问亚马逊上的任何书籍并单击“查看本书内部”链接来复制该行为。

4

9 回答 9

20

在 jQuery 1.3 之前,您可以使用jQuery.browser

if( $.browser.opera ){
  alert( "You're using Opera version "+$.browser.version+"!" );
}

从 1.3 版开始,您应该改用jQuery.support

这样做的主要原因是应该避免检查浏览器,因为功能可能会因版本而异,从而使您的代码立即过时。

您应该始终尝试使用特征检测。这将允许您查看当前浏览器是否支持您尝试使用的功能,无论浏览器品牌、版本等。

于 2009-03-13T23:46:13.297 回答
11

所有 Opera 5+ 浏览器中都有一个特殊的window.opera对象。所以一些简单的事情:

if (window.opera && window.opera.buildNumber) { 
    // we are in Opera 
}

就足够了。

于 2010-09-28T08:10:45.797 回答
5

我像这样检查 Opera:

if (/Opera/.test (navigator.userAgent)) // do something

为什么要使用 jQuery?

于 2009-03-13T23:08:04.027 回答
5

检测 javascript 功能比检测浏览器 userAgent 要好得多。

即 DOM、XmlHttpRequest、事件模型(event.target vs event.srcElement)、ActiveX、Java 等

通过专注于您将需要的 API 函数,而不是目标浏览器,您将创建一组更强大的脚本,并且不可避免地不那么特殊的大小写。

歌剧的这个链接可能会告诉你更多

于 2009-03-13T23:26:20.690 回答
2

Opera 自己的一个非常简单的方法:

if (window.opera) {
    //this browser is Opera
}

来源: http: //my.opera.com/community/openweb/idopera/

于 2012-09-23T05:51:11.413 回答
1

亚马逊在 Opera 上失败的主要原因是因为已经从服务器端发送了不同的代码......如果您使用 Firefox 访问同一页面,然后保存该页面并在 Opera 中重新打开它,它工作正常......

但他们承诺在一月份的某个时候解决这个问题......

于 2010-12-20T19:46:26.587 回答
1

我认为这种方式是最好的
if ( window.opera.version() == 12) { }
这个例子检查 Opera 版本是否为 12。当我在 Opera 中遇到字体问题时非常有用。

于 2015-11-30T09:07:12.690 回答
0

我不确定(我从来没有真正检查过歌剧),但如果内置的 jQuery 功能没有检测到歌剧,则可能是 jQuery 的一个错误,需要修复。我怀疑如果是这样的话,它应该会很快得到解决。

于 2009-03-13T23:14:15.697 回答
0

在当前的 HTML5 时代,您也可以经常检查浏览器功能。

if (!window.FormData) { alert("xmlhttprequest L2 FormData interface not available"); }
于 2010-09-28T08:28:21.147 回答