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

15 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
            );
        }
}
Run Code Online (Sandbox Code Playgroud)

没有什么明显的错误在我跳出这个代码,但我从来没有使用jQuery的之前,所以我不知道.

即使这段代码看起来像是试图让Opera用户通过,当我使用Opera 9.64访问该页面时,我得到一条"不支持的浏览器"消息.如果我更改Opera的设置以将自己报告为Firefox,则该页面可以完美运行!考虑到这一点,我很确定这是脚本而不是浏览器的问题.

任何jQuery专家都有建议吗?

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

Seb*_*Seb 20

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

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

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

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

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


jay*_*rjo 10

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

if (window.opera && window.opera.buildNumber) { 
    // we are in Opera 
}
Run Code Online (Sandbox Code Playgroud)

就足够了.

  • 不,这还不够. - 因为,如果在页面的某个地方,你有'id ="opera"`的元素,那么`if(window.opera)`将报告为真.在所有浏览器中. (4认同)

Ily*_*man 5

我检查Opera是这样的:

if (/Opera/.test (navigator.userAgent)) // do something
Run Code Online (Sandbox Code Playgroud)

你为什么想要jQuery?

  • 啊,任何Web开发人员都可以做的最好的事情是停止检测浏览器:-) (2认同)

Xia*_*ian 5

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

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

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

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