2012-10-29 21 views
8

Bir çeşit JavaScript kitaplığı geliştiriyorum. Ve ben sorun için bazı özel sorunları var: Tarayıcı: IE8/IE9 ve Belge Modu: IE7 Ben çözüm buldum, ama her durumda kullanmak istemiyorum ve sadece kullanmak istiyorum Yukarıda açıklanan durum var. Ben kullanarak tarayıcıyı tanıyabilir biliyoruz:Tarayıcı "Belge Modu" Nasıl Alınır

return navigator.userAgent.toLowerCase().indexOf('MSIE 8') > -1; 

Ama böyle bir şekilde değil, belge modunda sadece tarayıcı sürümü tanır ve ben, örneğin, tarayıcı varken benim çözümünü kullanmak istemiyorum IE8 ve belge modu IE 8. IE'de sayfa belge modu almanın bir yolu var mı? Şimdiden teşekkürler.

cevap

27

IE'nin hangi belge türünü tam olarak kullanmak için document.documentMode kullanabilirsiniz.

Tarayıcı modunuzu IE9 olarak ayarladıysanız, ancak belge modunuzu IE8'e çevirdiğinizde, document.documentMode == 8 değerini döndürür (userAgent dizesi hala IE9 olarak görünür). Bu, özellikle, JS'niz stil değişiklikleri içeriyorsa, tarayıcı modunu değil, IE'nin nasıl bir sayfa oluşturduğunu belirleyen belge modudur. Uyumluluk modu gerçekten sadece belge modunu değiştirir (genellikle IE7'ye). Ben I için gerekli ettik Bazı durumlarda

sadece IE en ayırt etmek böyle bir şey kullandım: Bazı yardımcı

if (document.documentMode == 7) { 
    doSomethingIn.IE7_only; 
} else { 
    doSomething.everwhereElse; 
} 

Umut.

+0

Belge modunu ayarlayabilir miyim? (Varsa documentwocumentMode == 8) {document.documentmode değerini herhangi bir değere ayarlayın} –

+0

Maalesef javascript ile ayarlayamazsınız. Ancak istenen IE modunu belirtmek için x-ua-compatability meta etiketini kullanabilirsiniz. IE'nin eski sürümleri üzerinde çalışacağını unutmayın (ör. IE11 + değil). Daha fazla bilgi için bunu okuyun: http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx –

+2

'document.documentMode' yalnızca IE8 + 'da desteklendiğini unutmayın, bu yüzden siz' Yerel IE7 oluşturmayı hedeflemeniz gerekiyorsa ek 'özellik algılama' gerekir. – WynandB

1

Ben doküman modunu nasıl alınacağını bilmiyorum, ama bir daha temel bir şekilde sorunu çözmek için akıllıca olabilir. Komut dosyanızda document.querySelector'u kullanmak istediğinizi varsayalım. Bu IE8/belge modu IE7 Standartlarında başarısız olur. document.documentMode kullanın:

return ~navigator.userAgent.toLowerCase().indexOf('MSIE 8') 
     && document.querySelector; //=> IE8 and Docmode IE7 => false 

belge modunda kontrol etmek için bir yol Bulunan: Yani document.querySelector kendisinin varlığı için ek bir onay çözüm olacaktır. Quirks mode için bir tamsayı (yani IE7 standartlarında belge modu için 7) döndürür. IE olmayan tarayıcılar için undefined olacaktır.

+0

Evet, bu iyi bir fikir, ancak javascript veya bazı cevapsız fonksiyonlarda başarısızlık var Sadece farklı belge modunda aynı işlevlerin farklı davranışları var. Çözümünüzü kullanmanın başka bir yolu olarak, belki de "DocumentMode IE7" altında çalışmayan bazı işlevleri biliyor musunuz? Böyle bir işlev bulursam belge modunu tanımak için kullanabilirim. – Mikhail

+0

Eh, 'document.querySelector' docmode IE7'de çalışmıyor;). Her neyse, yardımcı bir IE-document özelliği buldu, güncellenmiş cevabı gör. – KooiInc

+0

document.documentMode'un yalnızca IE8 + 'da desteklendiğini unutmayın, böylece yerel IE7 oluşturmayı hedeflemeniz gerekiyorsa ek' özellik algılama 'gerekir. – WynandB

İlgili konular