Bir tarayıcının "tuhaf" modunda olup olmadığı nasıl anlaşılır?


128

Diyelim ki, nispeten katı bir belge türüne ve uyumluya oldukça yakın bir HTML biçimlendirmesine sahip bir sayfanız olduğunu varsayalım, ancak belki de kontrolünüz dışındaki kullanıcı içeriği nedeniyle birkaç aptalca yoldan gözden kaçıyor ... Diyelim ki bir içerik üzerinde çalışıyorsunuz yönetim sistemi veya bazı temel yapıları kontrol ettiğiniz ve biraz javascript'e ihtiyaç duyduğunuz bir içerik yönetim sistemi teması, ancak sayfalara giren diğer her şeyden sorumlu değilsiniz.

Tarayıcının daha standartlara uygun motor kullanmak yerine "tuhaflıklar" moduna geçmeye karar verdiğini (veya: neyi belirleyeceğini) nasıl anlayabilirsiniz?

IE, Chrome, Safari ve Firefox elbette hepsi farklı şekilde ele alınacağından, başlıca tarayıcıların her biri için yanıtlar arıyorum. Tek bir hata onu zorlamak için yeterli mi yoksa biraz boşluk var mı?

Yanıtlar:


159

In Firefox ve Opera tarayıcı sayfası bilgisi işaretleyerek "tuhaflıklar modu" nda olup olmadığını belirleyebilir.

Kullanımı document.compatMode, çoğu tarayıcıda bulunduğunuz modu size söyleyecektir.

In Chrome, Safari ve IE adres çubuğuna bu javascript çalıştırın:

 javascript:window.alert('You are in ' + (document.compatMode==='CSS1Compat'?'Standards':'Quirks') + ' mode.')

( javascript:son güvenlik değişiklikleri nedeniyle adres çubuğunuza yapıştırdıktan sonra bölümü yeniden yazmanız gerekeceğini unutmayın )


Eski bir sayfayı "EDGE" moduna zorlarken karşılaştığım IE'de başka bir potansiyel değer var. Değer "BackCompat" idi
Greg Woods

DOCTYPE'ı tamamen geçersiz bir şeye ayarlarken Chrome'da da BackCompat aldım. Bu cevaptaki koda göre, değer CSS1Compat dışında bir şey ise tuhaflık modundadır. Bu gerçekten doğru mu? Olası tüm değerler nelerdir?
still_dreaming_1

Görünüşe göre BackCompatible, "tuhaflıklar" / "uyumluluk" modu için standart değerdir. Yalnızca 2 değer vardır: developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1

19

JavaScript'te oluşturma modunu sorgulayabileceğiniz gibi, bir sayfanın hangi işleme modunu kullandığını size söyleyen bir Yer İşareti'ne sahip olabilirsiniz .

Benim için iyi çalışan bu işleme modu yer imini buldum :

javascript:m=(document.compatMode=='CSS1Compat')?'Standards':'Quirks';window.alert('You%20are%20in%20'%20+%20m%20+%20'%20mode.');

11

'Tek bir hata onu zorlamak için yeterli mi yoksa biraz boşluk var mı?' Şeklindeki gerçek özel sorunuza tam yanıt. tamamen hataya bağlı olmasıdır. Örneğin,

<!-- Comment -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

IE 6 ve 7'de tuhaflar modunu zorlayacak, gerçekten bir hata olmamasına rağmen (dosyanın ilk satırı bir bildirim olmadığında sadece tam bir titreme atarlar). Türlerin / tuhaflıkların hızlı bir listesi burada bulunabilir

Test için HTML'nize aşağıdaki satırı yapıştırmayı deneyin (çok kötü javascript davranışı burada aktarıyorum - üzgünüm ... bunun asla yayınlanmayacağından emin olun :)

<a href="javascript:alert(document.compatMode);">What mode am I?</a>

Javascript tester için teşekkürler, çünkü tuhaflıklar modundan kaçmak için ilk iki denemem işe yaramadı.
Noumenon

css1compat! = tuhaflık modu?
Mike Cole


3

IE'ye katı olması gerektiğini söylerseniz (doctype aracılığıyla), sayfanın ortasında fikrini değiştirmeyecektir.


2

Tuhaflıklar modunu doğru anlarsam, bildirilen belge türüne göre doğrulanmayan bir sayfa tuhaflıklar modunu tetiklemek için yeterli değildir. Sadece doğru şekilde görüntülenmiyor.

Farklı tarayıcıların her bir belge türünü nasıl işlediğini belirlemek için bulduğum en iyi kaynak buradadır .


2

Web Geliştirici Araç Çubuğu eklentisine sahip Firefox için, çubuğun sağındaki üçlü simgeye bakabilirsiniz. En soldaki size hangi modda olduğunuzu söyler.


2

IE'de bunu geliştirici araçlarında göreceksiniz (F12'ye basarak), menüde yazıyor: Belge Modu: ... Ayrıca orada farklı bir modu da zorlayabilirsiniz.


Bu sorunun ana fikrini kaçırıyor. Bu, tuhaflıklar modu için bir yolu ve standartlar modu için farklı bir yolu çalıştıran javascript yazmanıza yardımcı olmaz.
Joel Coehoorn

Aslında Javascript'te nasıl yapılacağını sormadınız, tarayıcının hangi modu kullandığını nasıl bileceksiniz. Her neyse, bunu kastetmemiş olsanız bile, onu arayanlara yardımcı olabilir, ben de Firefox'ta bunu nasıl bileceğimi bilmem gerekiyordu ve bu soruya geldim.
Ronen Festinger

@JoelCoehoorn Asıl sorun, "nispeten katı bir belge" nin ne olduğunu asla açıklamamış olmanızdır!
Mr Lister

0

html5 sayfasında, sayfa <!DOCTYPE html>ile başla " " yazıp document.compatMode = 'CSS1Compat' olarak değişebilir

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.