2008-10-16 11 views
14

मुझे एटलस का उपयोग करने के लिए उपयोग किया जाता है। हाल ही में मैंने jQuery और कभी-कभी प्रोटोटाइप में संक्रमण शुरू कर दिया है। जिस परियोजना पर मैं वर्तमान में काम कर रहा हूं वह प्रोटोटाइप का उपयोग कर रहा है।प्रोटोटाइप पुस्तकालय में ब्राउज़र और संस्करण?

प्रोटोटाइप में, क्या ब्राउज़र नाम और संस्करण प्राप्त करने का कोई आसान तरीका है? मैंने एपीआई दस्तावेज को देखा है और इसे ढूंढ नहीं सकता है।

+0

और एक तरफ, मैं एक विशिष्ट ब्राउज़र और उसके संस्करण की ओर कोडिंग के नुकसान को समझता हूं, क्योंकि उपलब्ध 'सुविधाओं' की ओर कोडिंग के विपरीत। – EvilSyn

+0

अधिक स्कोअरिंग, और मैं प्रोटोटाइप देखता हूं। ब्राउजर जो मुझे आईई या गेको इत्यादि पर बूलियन देगा। इससे मदद मिलती है .. अगर इसमें संस्करण भी था तो अच्छा होगा लेकिन मुझे लगता है कि मैं उस के लिए सादे पुराने जेएस लिख सकता हूं । – EvilSyn

उत्तर

3

आप सही हैं - प्रोटोटाइप ब्राउज़र नाम या संस्करण का पता लगाने के लिए उपयोगिता प्रदान नहीं करता है।

आप विशेष रूप से एक प्लगइन के रूप में ब्राउज़र की जानकारी प्राप्त करने की आवश्यकता हैं, मैं जोड़ने का सुझाव देते हैं निम्नलिखित (सीधे jQuery से लिया गया):

var Browser = Class.create({ 
    initialize: function() { 
    var userAgent = navigator.userAgent.toLowerCase(); 
    this.version = (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1]; 
    this.webkit = /webkit/.test(userAgent); 
    this.opera = /opera/.test(userAgent); 
    this.msie = /msie/.test(userAgent) && !/opera/.test(userAgent); 
    this.mozilla = /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent); 
    } 
}); 
+2

आप कुछ हद तक गलत हैं, प्रोटोटाइप ब्राउज़र नाम का अनुमान लगाने के लिए उपयोगिता प्रदान करता है जैसा कि मैंने नीचे दिखाया है। और अनुमान वास्तव में सबसे अच्छा है जो आप कर सकते हैं, क्योंकि कोई भी ब्राउज़र अपने उपयोगकर्ता एजेंट स्ट्रिंग के बारे में झूठ बोल सकता है। – nertzy

+0

यह एक अच्छा समाधान है, धन्यवाद।(यह प्रोटोटाइप की तुलना में बेहतर काम करता है, जो केवल आईई, ओपेरा, वेबकिट, मोबाइलसाफरी और गेको के बीच अंतर करता है - और इसे बिना कोड किए बिना संस्करण संस्करणों के साथ।) –

+0

लाइन जोड़ना: this.chrome = /chrome/.test (userAgent) ; इसके लिए मान्यता जोड़ती है ... आपने अनुमान लगाया है। (नोट: आपको यह भी जोड़ने की जरूरत है: "&&! /chrome/.test (userAgent);" सफारी लाइन में।) –

7

प्रोटोटाइप कुछ झंडे प्रदान करता है आप एक विचार प्राप्त करने के लिए जाँच कर सकते हैं किस ब्राउज़र के लिए चल रहा है। ध्यान रखें कि किसी विशेष ब्राउज़र की जांच करने के बजाय आप जिस कार्यक्षमता का उपयोग करना चाहते हैं उसकी जांच करना बेहतर अभ्यास है।

यहाँ वर्तमान स्रोत पेड़ में prototype.js की ब्राउज़र- और सुविधा का पता लगाने भाग है: अगर मौजूदा ब्राउज़र Prototype.Browser.IE, या वैकल्पिक रूप से मूल्य की जांच कर आईई है

var Prototype = { 
    Browser: { 
    IE:  !!(window.attachEvent && 
     navigator.userAgent.indexOf('Opera') === -1), 
    Opera: navigator.userAgent.indexOf('Opera') > -1, 
    WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, 
    Gecko: navigator.userAgent.indexOf('Gecko') > -1 && 
     navigator.userAgent.indexOf('KHTML') === -1, 
    MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) 
    }, 

    BrowserFeatures: { 
    XPath: !!document.evaluate, 
    SelectorsAPI: !!document.querySelector, 
    ElementExtensions: !!window.HTMLElement, 
    SpecificElementExtensions: 
     document.createElement('div')['__proto__'] && 
     document.createElement('div')['__proto__'] !== 
     document.createElement('form')['__proto__'] 
    }, 
} 

तो तुम जांच कर सकता है, हो सकता है अधिक भविष्य-संगत और Prototype.BrowserFeatures.XPath के साथ XPath जैसे किसी विशेष सुविधा की जांच करें।

18

आप इस का उपयोग कर आईई संस्करण का पता लगाने की क्षमता जोड़ सकते nertzy का जवाब करने के लिए एक पूरा होने के रूप में:

Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6; 
Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7; 
Prototype.Browser.IE8 = Prototype.Browser.IE && !Prototype.Browser.IE6 && !Prototype.Browser.IE7; 

दूसरी ओर आप सर्वर साइड पर उपयोगकर्ता एजेंट विवरणों का पता लगाने के लिए है, बहुत। वैसे भी ब्राउज़र का पता लगाने क्रॉस-ब्राउज़र स्क्रिप्ट लिखने के लिए एक गंभीर रूप से त्रुटिपूर्ण रणनीति है, जिसका उपयोग तब किया जाना चाहिए जब ब्राउज़र सुविधा का पता लगाना विफल हो जाए। किसी उपयोगकर्ता के लिए उसके उपयोगकर्ता एजेंट के विवरण को बदलने के लिए यह बहुत आसान है।

+0

कृपया यह नहीं कि यह उत्तर IE9 का ख्याल नहीं रखता है (क्योंकि यह संभवतः अभी तक मौजूद नहीं है जब इसे पोस्ट किया गया था)। –

+0

मेरा अनुमान है कि 10% से कम उपयोगकर्ताओं को पता नहीं है कि उनके उपयोगकर्ता एजेंट को कैसे बदला जाए, इसलिए मुझे लगता है कि यह एक खराब रणनीति नहीं है –

+0

अंतिम पंक्ति को IE9 के लिए अपडेट करने की आवश्यकता है! भयानक ब्राउज़र के नवीनतम संस्करण का उपयोग करते समय Prototype.Browser.IE8 सच हो जाता है। – jmlnik

2

मैं बढ़ाया prototype.js है के बाद:

var Prototype = { ... }; 
इस के साथ

: मेरे लिए

// extension 
if (Prototype.Browser.IE) { 
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) { 
     Prototype.BrowserFeatures['Version'] = new Number(RegExp.$1); 
    } 
} 

वर्क्स ठीक, बुला की तरह है:

if (Prototype.Browser.IE && Prototype.BrowserFeatures['Version'] == 8) { ... } 
3

मैं इस पर इस्तेमाल करते हैं और प्रोटोटाइप की ब्राउज़र परिभाषाओं के ऊपर।

Object.extend(Prototype.Browser, { 
    ie6: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 6 ? true : false) : false, 
    ie7: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 7 ? true : false) : false, 
    ie8: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 8 ? true : false) : false, 
    ie9: (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) ? (Number(RegExp.$1) == 9 ? true : false) : false 
}); 

उम्मीद है कि यह मदद करता है!

0
  <script type="text/JavaScript"> 

       function getBrowserVersion() 
       { 
        var msg = "Not Recognised Browser"; 

        if (/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent)) 
        { 
         var ffversion = new Number(RegExp.$1) 

         for (var i = 1; i < 20; i++) 
         { 
          if (ffversion == i) 
          { 
           msg = "FF" + i + "x"; 
           break; 
          } 
         } 
        } 
        else if (/MSIE (\d+\.\d+);/.test(navigator.userAgent)) 
        { 
         var ieversion = new Number(RegExp.$1) 

         for (var i = 1; i < 20; i++) 
         { 
          if (ieversion == i) 
          { 
           msg = "IE" + i + "x"; 
           break; 
          } 
         } 
        } 

        alert(msg); // return msg; 
       } 

      </script> 
+0

कोड केवल उत्तर अच्छे नहीं हैं। कृपया अपने कोड के साथ उत्तर समझाएं। –

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