使用jQuery检测Opera的正确方法是什么?

时间:2009-03-13 22:53:29

标签: javascript jquery opera browser-detection

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

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

8 个答案:

答案 0 :(得分:20)

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

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

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

这样做的主要原因是应该避免检查浏览器,因为功能可能会随版本而变化,使您的代码很快就会过时。

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

答案 1 :(得分:10)

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

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

就够了。

答案 2 :(得分:5)

我像这样检查Opera:

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

为什么要jQuery?

答案 3 :(得分:5)

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

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

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

此处opera的链接可能会告诉您更多

答案 4 :(得分:1)

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

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

答案 5 :(得分:0)

我不确定(我从来没有真正检查过Opera)但是如果内置的jQuery功能没有检测到opera,可能是jQuery需要修复的bug。我怀疑如果是这样,它应该很快得到解决。

答案 6 :(得分:0)

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

if (!window.FormData) { alert("xmlhttprequest L2 FormData interface not available"); }

答案 7 :(得分:0)

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