簡體   English   中英

使用jQuery檢測Opera的正確方法是什么?

[英]What is the correct way to detect Opera using jQuery?

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專家都有建議嗎?

您可以通過訪問亞馬遜上的任何書籍並單擊“查看此書”鏈接來復制該行為。

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

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

從版本1.3開始,您應該使用jQuery.support

主要原因是應該避免檢查瀏覽器,因為功能可能會隨版本而變化,使您的代碼很快就會過時。

您應該始終嘗試使用特征檢測 這將允許您查看當前瀏覽器是否支持您嘗試使用的功能,無論瀏覽器品牌,版本等。

所有Opera 5+瀏覽器中都有一個特殊的window.opera對象。 所以簡單如下:

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

就足夠了。

我檢查Opera是這樣的:

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

你為什么想要jQuery?

檢測javascript功能比使用瀏覽器userAgent要好得多。

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

通過專注於您需要的API函數,而不是目標瀏覽器,您將創建一組更強大的腳本,並且不可避免地會減少特殊的外殼。

歌劇中的這個鏈接可能會告訴你更多

從Opera本身一個非常簡單的方法:

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

資料來源: http//my.opera.com/community/openweb/idopera/

亞馬遜在Opera上失敗的主要原因是因為已經從服務器端發送了不同的代碼...如果您使用Firefox訪問同一頁面然后保存該頁面並在Opera中重新打開它可以正常工作...

但是他們承諾在一月份的某個時候解決這個問題......

我認為這種方式是最好的
if(window.opera.version()== 12){}
這個例子檢查opera版本是否為12.當我在Opera中遇到font-face問題時非常有用。

在當前的HTML5中,您還可以經常檢查瀏覽器功能。

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

我不確定(我從來沒有真正檢查過Opera)但是如果內置的jQuery功能沒有檢測到opera,可能是jQuery需要修復的bug。 我懷疑如果是這樣,它應該很快得到解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM