[英]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
}
亞馬遜在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.