JQuery ile IE 8'i nasıl tespit ederim?


102

JQuery kullanarak sadece tarayıcı türünü değil aynı zamanda sürümü de tespit etmem gerekiyor. Çoğunlukla IE 8 olup olmadığını öğrenmem gerekiyor.

Doğru yapıp yapmadığımdan emin değilim.

Eğer yaparsam :

if (jQuery.browser.version >= 8.0) {
dosomething}

8.123.45.6 sürümü için çalışacağından emin değilim veya çalışacak mı?

Düzenleme: JQuery 2+ sürümünün IE8 ve altı desteği bıraktığını ve bu nedenle artık IE8'i algılamak için kullanılamayacağını unutmayın. JQuery'nin güncel bir sürümünü kullanıyorsanız, JQuery olmayan bir çözüm kullanmak gerekir.


11
aşağıda önerilen cevaplar jQuery.browser kullanmanızı önerir. Ancak, jQuery belgeleri jQuery.browser kullanımını kullanımdan kaldırmaktadır. Bunun yerine, jQuery.support'u kullanmanızı ve tarayıcıyı işaretlemek için desteklenmeyen bir özelliği işaret etmenizi önerirler. Örneğin, if (jQuery.support.opacity == false) {IE8 ve IE7 kodunuz}
IberoMedia

Bu jquery.support.opacitysadece istediğimi yaptı. Teşekkürler ...
nrod


İşleri düzgün bir şekilde yapıyorsanız, neredeyse hiçbir zaman tarayıcı sürümü tespiti yapmanız gerekmez. Bu özelliğin jQuery'den kaldırılmasının bir nedeni vardır ve bu nedenle, tarayıcı sürümü algılamanın kötü bir uygulama olmasıdır. Bunun yerine özellik algılamayı kullanmak, neredeyse tüm durumlarda sorunu çözecektir.
Spudley

2
IE8'i tespit etmem gerekiyor çünkü javascript motoru o kadar yavaş ki bu sayfada "komut dosyası çalıştırmayı durdurmak istiyor musunuz" diyen bir iletişim kutusu açıyor ve varsayılan "evet". Bunun için bir özellik tespit mekanizması varsa, onu kullanacağım. Aksi takdirde, tarayıcı == IE8. Javascript'i optimize edemiyorum çünkü buna neden olan
Kendo'nun

Yanıtlar:


79

Bu belgelenmiştir jQuery API Dokümantasyon . İle Internet Explorer'ı $.browser.msiekontrol edin ve ardından sürümünü ile kontrol edin $.browser.version.

GÜNCELLEME: $ .browser jQuery 1.9'da kaldırıldı

JQuery.browser () yöntemi, jQuery 1.3'ten beri kullanımdan kaldırılmıştır ve 1.9'da kaldırılmıştır. Gerekirse, jQuery Migrate eklentisinin bir parçası olarak mevcuttur. Özellik algılamayı Modernizr gibi bir kitaplıkla kullanmanızı öneririz.


eğer yaparsam: if (jQuery.browser.version> = 8.0) {dosomething} 8.123.45.6 sürümü için çalışacağından emin değilim veya çalışacak mı?
salmane

13
Bu bir dizedir, bu yüzden yapmalısın if(jQuery.browser.version.substring(0, 2) == "8.") { ... }. Bu şekilde tüm IE8 sürümleriyle çalışacaktır.
AndiDog

13
jQuery.browser1.3'te kullanımdan kaldırıldı ve gelecekte bir eklentiye taşınabilir. JQuery.browser belgelerine bakın
bendytree

Neyse ki hala ortalıkta ve kullanımdan kaldırmadan söz edilmiyor, @bendytree
Alastair

47
jquery.browser 1.9'da kaldırıldı
Mandeep Jain

173

Bence en iyi yol şudur:

HTML5 standart metninden:

<!--[if lt IE 7]> <html lang="en-us" class="no-js ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html lang="en-us" class="no-js ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html lang="en-us" class="no-js ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!--> <html lang="en-us" class="no-js"> <!--<![endif]-->

JS'de:

if( $("html").hasClass("ie8") ) { /* do your things */ };

özellikle $.browserjQuery 1.9+ sürümünden kaldırıldığından beri .


11
Bu, IE sürümlerini tespit etmenin çok akıllıca bir yoludur. Çok severim!
Greg

ancak web siteniz 'Content-type: application / xhtml + xml' başlığıyla teslim edildiyse çalışmaz, bu koşullu yorumlar dikkate alınmaz
philipp

1
Çok zekice ... ancak HTML5BP'deki koşulların eklediği mevcut sınıfları kontrol etmeniz gerektiğini belirtmek gerekir. Şu anda sınıfın lt-ie9AOT olduğunu düşünüyorumie8
byronyasgur

2
@meo Ben de bu uygulamayı seviyorum. Ama <html>bunun yerine sınıfa bağlı olmasının bir nedeni var <body>mı?
dinleniyor

@meo İlginç. Teşekkürler.
dinleniyor


56

IE8'i algılamak için HTML de kullanabileceğinizi unutmayın.

<!--[if IE 8]>
<script type="text/javascript">
    ie = 8;
</script>
<![endif]-->

Tüm komut dosyalarınızdan önce buna sahip olmak, "ie" değişkenini veya her neyse kontrol etmenizi sağlar.


4
Bu sözdizimi aynı zamanda "küçüktür" ("[IE 7 ise]") ve "büyüktür" ("[IE 8 ise]") karşılaştırıcılarını destekler.
spiffytech

1
<! - [if lte IE 8]> ie8 dahil için
user227353

1
Bunu yapmanın en iyi yolu budur, "Neden IE8 kullanıyorsunuz?" Yazan başka bir sayfaya yönlendirmeniz yeterli. HEMEN YÜKSELT!
Leon Gaban

2
Bugünün standardına göre, onlara neden IE kullandıklarını sorardım.
TheBuzzSaw

JQuery 2.1.1, IE8 ile çalışmadığından ve bu nedenle IE8'i tespit etmek için kullanılamadığından, bu şu anda en iyi çözüm gibi görünüyor!
Dave

27

document.documentMode , tarayıcı IE8 değilse tanımsızdır,

standartlar modu için 8 ve 'IE7 ile uyumlu' için 7 döndürür

IE7 olarak çalışıyorsa, desteklenmeyecek pek çok css ve dom özelliği vardır.


9
IE9'un 9 döndürdüğüne dikkat edin. Bu daha yüksek oyu alan bir cevap olmalı, ancak artık $ .browser artık iyi bir çözüm değil. Deneyin:if ((document.documentMode || 100) < 9) { // IE8
Don McCurdy

eğer (document.documentMode! == undefined && document.documentMode == 8) {...}
jpprade

IE8'in hala çok fazla kullanıldığı bazı uygulamalar için - yani ABD okulları - için @ Don McCurdy'in yaklaşımı hem basit hem de etkilidir. Modernizr ile birlikte iyi çalışıyor.
cbmtrx

Mükemmel cevap! Bu, IE8'den IE11'e kadar sürüm numaralarını döndürür (koşullu yorumlar için IE5'ten IE9'a kıyasla - herhangi birinin hala orijinal IE7 veya IE6'yı da algılaması gerekiyorsa, koşullu yorumları kullanmanız gerekir). O Not docs göre o döndürebilir 0sayfa yükleme iken - "daha sonraki bir zamanda belge uyumluluk modunu belirlemek için deneyin" (yani sonra belge hazır).
user56reinstatemonica8

15

Varsayalım ...

  • ... karmaşık oluşturma motoru olduğunu bir stilin eski IE'de doğru görünmesini sağlamak için algılamak istediğiniz eski IE sürümlerinin (aksi takdirde, özellik algılamayı kullanın)
  • ... HTML'ye yalnızca koşullu yorumlar ekleyemezsiniz - örneğin, herhangi bir sayfaya uygulanabilen JS eklentileri için (aksi takdirde, <body>veya üzerinde koşullu sınıfların hilesini yapın <html>)

... o zaman bu muhtemelen en iyi numaradır ( bu jQuery olmayan, biraz daha az esnek varyantı temel alır ). Daha sonra testler oluşturur ve ardından uygun bir koşullu yorumu kaldırır.

(IE10 + 'standartlar modunda' koşullu yorumlar göz ardı edilir - ancak IE10 + 'standartlar modu' çılgın bir işleme motoruna sahip olmadığı için bu iyi olmalıdır!)

Bu işlevi bırakın:

function isIE( version, comparison ){
    var $div = $('<div style="display:none;"/>');

    // Don't chain these, in IE8 chaining stops some versions of jQuery writing the conditional comment properly
    $div.appendTo($('body'));
    $div.html('<!--[if '+(comparison||'')+' IE '+(version||'')+']><a>&nbsp;</a><![endif]-->');

    var ieTest = $div.find('a').length;
    $div.remove();
    return ieTest;
}

O zaman şu şekilde kullanın:

if(isIE()){ /* runs in all versions of IE after 4 before standards-mode 10 */ }

if(isIE(8)){ /* runs in IE8 */ }

if(isIE(9)){ /* runs in IE9 */ }

if(isIE(8,'lte')){ /* runs in IE8 or below */ }

if(isIE(6,'lte')){ /* if you need this, I pity you... */ }

Ayrıca, bu işlevin sonuçlarını önbelleğe almanızı öneririm, böylece tekrarlamanız gerekmez. Örneğin, dizeyi (comparison||'')+' IE '+(version||'')bir nesnede bir nesnede saklamak ve bu testin sonucunu kontrol etmek için bir anahtar olarak kullanabilirsiniz .


9

Not:

1) $ .browser jQuery 1.9+ sürümünde kaldırılmış görünüyor (Mandeep Jain tarafından belirtildiği gibi). Edilir önerilen kullanma .support yerine.

2) $ .browser.version , tarayıcı "uyumluluk" modundayken IE> 7'de "7" döndürebilir.

3) IE 10 itibariyle, koşullu yorumlar artık çalışmayacaktır.

4) jQuery 2.0+, IE 6/7/8 için desteği bırakacaktır

5) document.documentMode yalnızca Internet Explorer 8+ tarayıcılarında tanımlanmış görünüyor . Döndürülen değer, Internet Explorer'ın hangi "uyumluluk" modunda çalıştığını size söyleyecektir. Yine de iyi bir çözüm değil.

Çok sayıda .support () seçeneğini denedim, ancak bir IE tarayıcısı (9+) uyumluluk modunda olduğunda, basitçe IE 7 gibi davranacak gibi görünüyor ... :(

Şimdiye kadar sadece işe yaradığını buldum (tür-a):

(documentMode tanımlı değilse ve htmlSerialize ve opaklık desteklenmiyorsa, büyük olasılıkla IE <8 ... 'e bakıyorsunuzdur.)

if(!document.documentMode && !$.support.htmlSerialize && !$.support.opacity) 
{
    // IE 6/7 code
}

5

Tarayıcı sürümleriyle uğraşırsanız, çoğu zaman işe yaramaz. Kendiniz uygulamak istemezsiniz. Ama Paul Irish ve diğer akıllı insanlar tarafından yapılan Modernizr'i yapabilirsiniz . Tarayıcının gerçekte neler yapabileceğini tespit edecek ve uygun sınıfları <html>elemente koyacaktır . Ancak Modernizr ile IE sürümünü şu şekilde test edebilirsiniz:

$('html.lt-ie9').each() {
    // this will execute if browser is IE 8 or less
}

Benzer şekilde .lt-ie8, ve kullanabilirsiniz .lt-ie7.


3

Ayrıca jQuery.support'a da bakmalısınız . Özellik algılama, işlevselliğinizi kodlamak için tarayıcı algılamasından çok daha güvenilirdir (yalnızca tarayıcı sürümlerini günlüğe kaydetmeye çalışmadığınız sürece).


3
IE8'i algılamak için jQuery.support'u nasıl kullanırsınız?
BishopZ

AJAX aradığınız şeyse, tarayıcı AJAX'ı destekliyorsa doğru döndüren jQuery.support.ajax'ı kullanabilirsiniz
Jonathan Lin


3

Bu jquery kullanarak tarayıcının hangi tür ve sürümünü kolayca tespit edebilirsiniz.

$(document).ready(function()
{
 if ( $.browser.msie ){
    if($.browser.version == '6.0')
    {   $('html').addClass('ie6');
    }
    else if($.browser.version == '7.0')
    {   $('html').addClass('ie7');
    }
    else if($.browser.version == '8.0')
    {   $('html').addClass('ie8');
    }
    else if($.browser.version == '9.0')
    {   $('html').addClass('ie9');
    }
 }
 else if ( $.browser.webkit )
 { $('html').addClass('webkit');
 }
 else if ( $.browser.mozilla )
 { $('html').addClass('mozilla');
 }
 else if ( $.browser.opera )
 { $('html').addClass('opera');
 }
});

1

Buraya tarayıcı / işletim sistemi algılamasını tanımlamak için Jquery tarayıcı algılama eklentisi.

Eklentiyi ekledikten sonra bunu stil amacıyla kullanabilirsiniz.

$("html").addClass($.os.name);
$("body").addClass($.browser.className);
$("body").addClass($.browser.name);

0

Tarayıcı adını tespit etmek için $ .browser kullanabilirsiniz. olası değerler şunlardır:

  • webkit (jQuery 1.4 itibariyle)
  • safari (kullanımdan kaldırıldı)
  • opera
  • msie
  • Mozilla

veya bir boole bayrağı alın: Tarayıcı MSIE ise $ .browser.msie doğru olacaktır.

sürüm numarasına gelince, yalnızca ana sürüm numarasıyla ilgileniyorsanız - parseInt ($. browser.version, 10) kullanabilirsiniz. $ .browser.version dizesini kendiniz ayrıştırmanıza gerek yok.

Her neyse, $ .support özelliği, $ .browser'a güvenmek yerine belirli özelliklerin desteğini algılamak için kullanılabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.