2009-03-13 12 views
15

Amazon.com ने हाल ही में अपने जावास्क्रिप्ट को अपडेट किया है, और यह कुछ ओपेरा ब्राउज़र के साथ समस्याएं पैदा कर रहा है।jQuery का उपयोग कर ओपेरा का पता लगाने का सही तरीका क्या है?

उनके ब्राउज़र का पता लगाने कोड इसलिए की तरह दिखता है, लेकिन यह गलत है:

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 उपयोग नहीं किया है पहले तो मैं नहीं जानता कि ।

भले ही यह कोड ओपेरा उपयोगकर्ताओं को ओपेरा 9.64 के साथ पृष्ठ पर जाने पर ओपेरा उपयोगकर्ताओं को जाने की कोशिश कर रहा है, मुझे एक "असमर्थित ब्राउज़र" संदेश मिलता है। यदि मैं फ़ायरफ़ॉक्स के रूप में खुद को रिपोर्ट करने के लिए ओपेरा की सेटिंग्स बदलता हूं, तो पृष्ठ पूरी तरह से काम करता है! इसे ध्यान में रखते हुए, मुझे पूरा यकीन है कि यह स्क्रिप्ट के साथ एक समस्या है, ब्राउज़र नहीं।

किसी भी jQuery विशेषज्ञों के पास कोई सुझाव है?

आप अमेज़ॅन पर किसी भी पुस्तक पर जाकर और "इस पुस्तक के अंदर देखो" लिंक पर क्लिक करके व्यवहार को दोहरा सकते हैं।

+0

मैं ओपेरा 9.64 का भी उपयोग कर रहा हूं लेकिन वह पृष्ठ मुझे बता रहा है कि अमेज़ॅन ऑनलाइन रीडर आईई> 6.0, फ़ायरफ़ॉक्स> 1.5 या सफारी> 2.0 –

+3

के साथ सबसे अच्छा काम करता है ब्राउज़र ब्राउज़र का पता लगाने और "असमर्थित ब्राउज़र" संदेश का एक अच्छा उदाहरण लगभग हमेशा एक लुभावनी विचार हैं। – tgecho

+0

खैर, * यह * स्नीफिंग का विशिष्ट स्निपेट वास्तव में ओपेरा को अनुमति देने का प्रयास करता है, लेकिन नीचे दिए गए उत्तरों में से एक के रूप में अमेज़ॅन के पास कहीं और अधिक स्नीफिंग है, जिसमें सर्वर-साइड स्नीफिंग भी शामिल है, जो ओपेरा-अनुकूल नहीं है। – hallvors

उत्तर

5

मैं इस तरह ओपेरा के लिए जाँच:

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

तुम क्यों jQuery चाहेगा?

+0

मुझे नहीं - यह अमेज़ॅन है। मैंने उनके तकनीकी समर्थन को लिखा, लेकिन सामान्य रूप से तकनीकी सहायता के लोगों ने जावास्क्रिप्ट के बारे में कभी नहीं सुना था। Aargh। मुझे लगता है कि मदद के लिए उन्हें एक फिक्स भेजने के लिए और अधिक उत्पादक है, क्योंकि एक फिक्स वास्तव में एक सीएसआर के बजाय प्रोग्रामर को अग्रेषित किया जा सकता है। –

+2

आह, किसी भी वेब डेवलपर की सबसे अच्छी बात यह है कि ब्राउजर का पता लगाना बंद करना है :-) –

0

मुझे यकीन नहीं है (मैं वास्तव में ओपेरा के लिए वास्तव में कभी भी जांच नहीं करता) लेकिन यदि अंतर्निहित jQuery कार्यक्षमता ओपेरा का पता नहीं लगाती है, तो jQuery के साथ एक बग हो सकता है जिसे ठीक करने की आवश्यकता है। मुझे संदेह होगा कि अगर ऐसा है, तो इसे काफी जल्दी हल किया जाना चाहिए।

+1

jQuery कहता है कि यह ओपेरा संगत है, और http://docs.jquery.com/Utilities/jQuery.browser पर उदाहरण पृष्ठ मेरे ब्राउज़र का पता लगाता है पूरी तरह से। मुझे नहीं लगता कि यह एक jQuery बग है। इसे जिस तरह से इस्तेमाल कर रहे हैं, उसके बारे में कुछ होना चाहिए। –

5

ब्राउज़र उपयोगकर्ता एजेन्ट की बजाय जावास्क्रिप्ट क्षमताओं का पता लगाने के लिए यह बेहतर है।

यानी डोम, XmlHttpRequest, इवेंट मॉडल (event.target बनाम event.srcElement) ActiveX, जावा आदि

एपीआई कार्यों है कि आप की आवश्यकता होगी पर ध्यान केंद्रित करके, बल्कि लक्ष्य ब्राउज़र की तुलना में आप एक अधिक पैदा करेगा स्क्रिप्ट का मजबूत सेट, और अनिवार्य रूप से कम विशेष आवरण।

यह शायद आपको बता देंगे opera पर यहाँ लिंक अधिक

20

jQuery 1.3 से पहले, आप jQuery.browser इस्तेमाल कर सकते हैं:

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

संस्करण 1.3 से, आप jQuery.support बजाय का उपयोग करना चाहिए।

इसका मुख्य कारण यह है कि ब्राउज़र के लिए जांच से बचना चाहिए, क्योंकि संस्करण संस्करण से संस्करण में बदल सकते हैं, जिससे आपका कोड अप्रचलित हो जाता है।

आपको हमेशा feature detection का उपयोग करने का प्रयास करना चाहिए। यह मौजूदा ब्राउज़र सुविधा का उपयोग करने के लिए कोशिश कर रहे हैं, भले ही ब्राउज़र ब्रांड, संस्करण, आदि का समर्थन करता है, तो आप देख सकेंगे

+0

स्पॉट-ऑन। वह कोड है जिसे मैं ढूंढ रहा हूं। अब उम्मीद है कि अमेज़ॅन सुनेगा ... :) –

+0

मदद करने के लिए खुशी हुई, लिस्टा। यदि आप मदद करते हैं तो क्या आप हल के रूप में चिह्नित कर सकते हैं? धन्यवाद! – Seb

+1

स्पष्ट होने के लिए, jQuery 1.3+ वास्तव में jQuery.browser को हटा नहीं देता है। '" jQuery.browser भविष्य के संस्करणों से हटाया नहीं जाएगा "'। लेकिन, आप फीचर डिटेक्शन के बारे में सही हैं। – Yahel

10

नहीं है एक विशेष window.opera वस्तु जो सभी ओपेरा में मौजूद है 5 + ब्राउज़रों। तो कुछ आसान:

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

पर्याप्त होगा।

+4

नहीं, यह पर्याप्त नहीं होगा। - क्योंकि, यदि पृष्ठ में कहीं भी है, तो आपके पास 'id =" opera "' के साथ तत्व है, फिर 'if (window.opera)' सत्य रिपोर्टिंग करेगा। सभी ब्राउज़रों में। – c69

+1

फिर आप यह कर सकते हैं अगर (window.opera && window.opera.version) यह अन्य ब्राउज़रों में सच नहीं होगा। –

+0

अच्छा बिंदु, मैंने अपना जवाब अपडेट कर लिया है। – jayarjo

0

वर्तमान HTML5 समय में, आप अक्सर ब्राउज़र सुविधाओं की जांच भी कर सकते हैं।

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

मुख्य कारण अमेज़न ओपेरा पर विफल रहता है, क्योंकि पहले से ही सर्वर साइड से अलग कोड भेज ... आप ओपेरा में Firefox के साथ एक ही पृष्ठ पर जाते हैं और फिर उस पृष्ठ बचाने के लिए और फिर से खोलना यह ठीक काम करता है ...

लेकिन वे कहते हैं कि जनवरी में कुछ समय तय करने के लिए वादा किया था ...

2

ओपेरा स्वयं से एक बहुत ही सरल तरीका:

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

स्रोत: +०१२३९५८३७०५५

0

मुझे लगता है कि इस तरह से सबसे अच्छा
है अगर (window.opera.version() == 12) {}
यह उदाहरण जाँच ओपेरा संस्करण 12. बहुत उपयोगी है अगर जब मैं font- समस्याएं आ रही हैं ओपेरा में चेहरा

संबंधित मुद्दे