2010-12-21 24 views
19

क्या यह पता लगाने का कोई अच्छा तरीका है कि उपयोगकर्ता का ब्राउज़र jQuery का उपयोग कर इंटरनेट एक्सप्लोरर है या नहीं?jQuery ब्राउज़र का पता लगाने?

मुझे आईई का उपयोग कर पीएनजी ग्राफिक्स के साथ कोई समस्या है और यदि वे आईई के साथ साइट देख रहे हैं तो उन्हें केवल जीआईएफ के लिए स्वैप करना चाहते हैं।

+2

क्या मुद्दा आप PNG का साथ है? ब्राउज़र प्रकार के आधार पर ग्राफिक्स को स्वैप करने के लिए शायद PHP या कुछ समान सर्वर पक्ष का उपयोग करना बेहतर होगा। ए) अधिक विश्वसनीय और बी) कोई जावास्क्रिप्ट वाले लोगों के लिए काम करेगा। –

+0

@ थॉमस क्लेसन, वास्तव में इस सर्वर पक्ष को करने का कोई विश्वसनीय तरीका नहीं है। –

+0

IE6 में कष्टप्रद नीले रंग की पृष्ठभूमि, मैं एक धारीदार पृष्ठभूमि बॉक्स है और एक GIF के रूप में शीर्ष पर एक png उपयोग करने के लिए प्रदर्शित नहीं करता है चाहता हूँ सही ढंग से – Dancer

उत्तर

21

आप कर सकते हैं, $.browser का उपयोग कर हाँ, लेकिन यह एक बुरा विचार ब्राउज़र पहचान का उपयोग करना सीखें:

if($.browser.msie) { /* IE */ } 

उदाहरण के लिए एक बेहतर विकल्प $.support होगा जो सुविधा पहचान है, इस तरह:

if(!$.support.opacity) { /* IE 6-8 */ } 

$.support.opacity कि स्टाइल में opacity का समर्थन नहीं करते हैं (हालांकि आईई 7-8 पारदर्शी PNG का फ़ाइल संभाल ब्राउज़रों में गलत है, तो यह अभी भी नहीं आदर्श है, क्या आप के बाद कर रहे हैं पर निर्भर करता है मैं व्यक्तिगत रूप से है ... लगता है कि आप IE 7/8 उपयोगकर्ताओं को उप-इष्टतम अनुभव दे रहे हैं)।

आप वास्तव में क्या करना चाहिए लक्ष्य IE6 है जो (एक अल्फा फिल्टर के बिना) नहीं समर्थन पारदर्शी PNG का होता है, इस तरह:

<!--[if IE 6]> 
    <link rel="stylesheet" type="text/css" href="IE6ImageStyles.css"> 
<![endif]--> 
+0

सलाह निक के लिए चीयर्स, यानी i6 को लक्षित करने के लिए बेहतर मानते हैं। – Dancer

+4

को jquery के लिए jquery माइग्रेट प्लगइन होना चाहिए> 1.9 इसके लिए काम करने के लिए। चूंकि इस दृष्टिकोण को – Beta033

+0

बहिष्कृत किया गया है हां, यह एक समय में स्वीकृत उत्तर के रूप में उचित था लेकिन अब नहीं है (यह Jquery की गलती है, निक नहीं है)। – MrBoJangles

0

$.browser फ़ंक्शन देखें।

आईई का पता लगाने के लिए, आप IE conditional comments के लिए भी बेहतर और बेहतर जा सकते हैं।

उदाहरण:

<!--[if IE]> 
    Special instructions for IE here 
<![endif]--> 
+1

"हम इस संपत्ति का उपयोग कर के खिलाफ सिफारिश, (jQuery.support देखें) के बजाय सुविधा का पता लगाने का उपयोग करने का प्रयास करें jQuery.browser jQuery के भविष्य के रिलीज में एक प्लगइन के लिए ले जाया जा सकता है।।" – neoswf

0
<script> 
    jQuery.each(jQuery.browser, function(i, val) { 
     $("<div>" + i + " : <span>" + val + "</span>") 
       .appendTo(document.body); 
    });</script> 

$ .browser.msie
के लिए आईई

+0

धन्यवाद सरल, मुझे लगता है कि मैं यद्यपि यानी लक्ष्यीकरण के लिए जाऊंगा। – Dancer

7

हाँ, आप कर सकते हैं, लेकिन वे आपको jQuery.support का उपयोग करना पसंद: http://api.jquery.com/jQuery.support/

इस मामले में, jQuery.support.opacity का उपयोग करें।

संपादित करें: यह मानना ​​है कि यह अस्पष्टता के बारे में है।

-1

मुझे एहसास है कि यह कोई जवाब नहीं है - लेकिन मैं वास्तव में इसे एक टिप्पणी में पोस्ट नहीं कर सकता!

यदि आप जावास्क्रिप्ट का उपयोग करने जा रहे हैं तो यह कोड पीएनजी समस्या को IE6 के साथ ठीक करता है। मैंने इसका अधिक उपयोग नहीं किया है, लेकिन afaik आपको x.gif नामक पारदर्शी gif छवि की आवश्यकता है और यह स्वचालित रूप से बाकी है।

// JavaScript Document 

var supersleight = function() { 

    var root = false; 
    var applyPositioning = true; 

    // Path to a transparent GIF image 
    var shim   = 'x.gif'; 

    // RegExp to match above GIF image name 
    var shim_pattern = /x\.gif$/i; 



    var fnLoadPngs = function() { 
     if (root) { 
      root = document.getElementById(root); 
     }else{ 
      root = document; 
     } 
     for (var i = root.all.length - 1, obj = null; (obj = root.all[i]); i--) { 
      // background pngs 
      if (obj.currentStyle.backgroundImage.match(/\.png/i) !== null) { 
       bg_fnFixPng(obj); 
      } 
      // image elements 
      if (obj.tagName=='IMG' && obj.src.match(/\.png$/i) !== null){ 
       el_fnFixPng(obj); 
      } 
      // apply position to 'active' elements 
      if (applyPositioning && (obj.tagName=='A' || obj.tagName=='INPUT') && obj.style.position === ''){ 
       obj.style.position = 'relative'; 
      } 
     } 
    }; 

    var bg_fnFixPng = function(obj) { 
     var mode = 'scale'; 
     var bg = obj.currentStyle.backgroundImage; 
     var src = bg.substring(5,bg.length-2); 
     if (obj.currentStyle.backgroundRepeat == 'no-repeat') { 
      mode = 'crop'; 
     } 
     obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')"; 
     obj.style.backgroundImage = 'url('+shim+')'; 
    }; 

    var el_fnFixPng = function(img) { 
     var src = img.src; 
     img.style.width = img.width + "px"; 
     img.style.height = img.height + "px"; 
     img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')"; 
     img.src = shim; 
    }; 

    var addLoadEvent = function(func) { 
     var oldonload = window.onload; 
     if (typeof window.onload != 'function') { 
      window.onload = func; 
     } else { 
      window.onload = function() { 
       if (oldonload) { 
        oldonload(); 
       } 
       func(); 
      }; 
     } 
    }; 

    return { 
     init: function() { 
      addLoadEvent(fnLoadPngs); 
     }, 

     limitTo: function(el) { 
      root = el; 
     }, 

     run: function() { 
      fnLoadPngs(); 
     } 
    }; 
}(); 

// limit to part of the page ... pass an ID to limitTo: 
// supersleight.limitTo('header'); 

supersleight.init(); 
1
$.browser.webkit 
$.browser.safari 
$.browser.opera 
$.browser.msie 
$.browser.mozilla 

if ($.browser.msie) { 
     //do something 
} 
else if ($.browser.mozilla) { 
     //do something else 
} 

jQuery के साथ काम करता है 1.3

+1

"हम इस संपत्ति का उपयोग करने के खिलाफ अनुशंसा करते हैं; कृपया इसके बजाय फीचर डिटेक्शन का उपयोग करने का प्रयास करें (jQuery.support देखें)। JQuery.browser को jQuery की भावी रिलीज में प्लगइन में ले जाया जा सकता है।" – neoswf

+1

भी, आपका '== सत्य' अनावश्यक है। बस 'if ($ .browser.msie) {}' को कॉल करना भी ठीक से काम करेगा। – Ortund

+0

यह काम करता है! धन्यवाद। – Nolesh

3

$ .browser 1.9 में हटा दिया गया है के रूप में यह अब सुझाव दिया है सुविधा का पता लगाने $ के माध्यम से पसंद किया जाता था।समर्थन

2

बेहतर ब्राउज़र का पता लगाने jQuery के लिए दृढ़ता से इस तरह के jQuery.support में संपत्तियों पर निर्भरता के बजाय Modernizr या पदावनत jQuery.browser (v1.9 के बाद से हटा दिया) के रूप में एक बाहरी पुस्तकालय के उपयोग की सलाह

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