कैसे बताएं कि कोई ब्राउज़र "quirks" मोड में है?


128

मान लें कि आपके पास अपेक्षाकृत सख्त सिद्धांत और HTML मार्कअप वाला एक पृष्ठ है जो शिकायत के बहुत करीब है, लेकिन शायद कुछ मूर्खतापूर्ण तरीकों से चूक जाता है, शायद उपयोगकर्ता सामग्री के कारण जो आपके नियंत्रण से बाहर है ... कहते हैं कि आप एक सामग्री पर काम कर रहे हैं प्रबंधन प्रणाली या सामग्री प्रबंधन प्रणाली के लिए एक थीम जहां आप कुछ बुनियादी संरचना को नियंत्रित करते हैं और कुछ जावास्क्रिप्ट की आवश्यकता होती है, लेकिन आप उन सभी चीजों के लिए जिम्मेदार नहीं हैं जो पृष्ठों में जाती हैं।

आप कैसे बता सकते हैं (या: क्या निर्धारित करेगा) जब ब्राउज़र "quirks" मोड में जाने का फैसला करता है, तो उपयोग के बजाय यह अधिक मानक अनुरूप इंजन है?

मैं IE, क्रोम, सफारी और फ़ायरफ़ॉक्स के बाद से सभी प्रमुख ब्राउज़रों के जवाब की तलाश कर रहा हूँ, बेशक सभी अलग-अलग तरीके से संभालेंगे। क्या एक भी त्रुटि इसे मजबूर करने के लिए पर्याप्त है या क्या आपके पास कोई रास्ता है?

जवाबों:


159

में फ़ायरफ़ॉक्स और ओपेरा आप लगा सकते हैं कि आपके ब्राउज़र पेज की जानकारी को चेक करके "quirks मोड" में है।

उपयोग करना document.compatMode, आपको उस मोड को बताएगा जो आप सबसे ब्राउज़रों के साथ हैं।

में क्रोम, सफारी, और IE , पता बार में इस जावास्क्रिप्ट चलाएँ:

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

(ध्यान दें कि javascript:हाल के सुरक्षा परिवर्तनों के कारण आपको अपने पता बार में चिपकाने के बाद उस हिस्से को फिर से टाइप करना होगा )


IE में एक और संभावित मूल्य है जो मुझे एक पुराने पृष्ठ को "EDGE" मोड में मजबूर करते समय आया था। मान था "बैककॉम"
ग्रेग वुड्स

मुझे Chrome में BackCompat मिला जब DOCTYPE की स्थापना पूरी तरह से अमान्य थी। इस उत्तर में कोड के अनुसार, यदि मूल्य CSS1Compat के अलावा कुछ भी है, तो यह quirks मोड में है। क्या यह सच है? सभी संभावित मूल्य क्या हैं?
still_dreaming_1

जाहिरा तौर पर BackCompatible "quirks" / "संगतता" मोड के लिए मानक मूल्य है। केवल 2 मान हैं: developer.mozilla.org/en-US/docs/Web/API/Document/compatMode
still_dreaming_1

19

जैसा कि आप जावास्क्रिप्ट में रेंडर मोड को क्वेरी कर सकते हैं, आपके पास एक बुकमार्कलेट हो सकता है जो आपको बताएगा कि एक पेज का उपयोग करने वाला रेंडर मोड कौन सा है।

मुझे यह रेंडर मोड बुकमार्कलेट मिला जो मेरे लिए अच्छा काम करता है:

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

11

आपके वास्तविक विशिष्ट प्रश्न का पूरा उत्तर 'क्या कोई एक त्रुटि है जो इसे लागू करने के लिए पर्याप्त है या क्या आपके पास कोई रास्ता है?' यह है कि यह पूरी तरह से त्रुटि पर निर्भर करता है। उदाहरण के लिए,

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

वास्तव में एक त्रुटि नहीं होने के बावजूद IE 6 और 7 में क्विरक्स मोड को मजबूर करेगा (वे केवल एक कुल wobbly फेंकते हैं जब फ़ाइल की बहुत पहली पंक्ति एक घोषणा नहीं होती है)। प्रकार / क्विर्क की एक त्वरित सूची यहां पाई जा सकती है

परीक्षण के लिए अपने HTML में निम्न पंक्ति को चिपकाने की कोशिश करें (बहुत खराब जावास्क्रिप्ट व्यवहार स्पष्ट रूप से मैं यहां से गुजर रहा हूं - क्षमा करें ... सुनिश्चित करें कि यह कभी भी जीवित नहीं होगा :)

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

जावास्क्रिप्ट टेस्टर के लिए धन्यवाद, क्योंकि मेरी पहली दो क्विरक्स मोड से बचने की कोशिश की गई थी।
नौमेनन

css1compat? = quirks मोड?
माइक कोल

4

Http://www.quirksmode.org/css/quirksmode.html के अनुसार : "समस्या यह थी कि quirks मोड में लिखे गए कुछ पृष्ठों में doctypes थे। इसलिए प्रत्येक ब्राउज़र की doctypes के साथ अपनी सूची होती है जो quirks मोड को ट्रिगर करती हैं। इस ब्राउज़र को देखें। इन सूचियों के अवलोकन के लिए तुलना चार्ट: http://hsivonen.iki.fi/doctype/ "

उम्मीद है की यह मदद करेगा


3

यदि आप IE को बताते हैं कि यह सख्त होना चाहिए (doctype के माध्यम से) तो यह पेज के माध्यम से अपने दिमाग को आधा नहीं बदलेगा।


2

यदि मैं quirks मोड को सही ढंग से समझता हूं, तो एक पृष्ठ जो इसके घोषित सिद्धांत के खिलाफ मान्य नहीं है, quirks मोड को ट्रिगर करने के लिए पर्याप्त नहीं है। यह सही ढंग से प्रदर्शित नहीं होगा।

सबसे अच्छा संसाधन मैंने यह निर्धारित करने के लिए पाया है कि प्रत्येक सिद्धांत के विभिन्न ब्राउज़र कैसे संभालते हैं


2

वेब डेवलपर टूलबार के साथ फ़ायरफ़ॉक्स के लिए, आप बार के दाईं ओर आइकन की तिकड़ी को देख सकते हैं। सबसे बाईं ओर आपको बताता है कि आप किस मोड में हैं।


2

IE में आप इसे डेवलपर टूल (F12 दबाने) में देखेंगे, इसे मेनू में कहते हैं: डॉक्यूमेंट मोड: ... और आप वहां एक अलग मोड को भी बाध्य कर सकते हैं।


यह प्रश्न के बिंदु को याद करता है। यह आपको जावास्क्रिप्ट लिखने में मदद नहीं करता है जो क्वर्की मोड के लिए एक पथ और मानक मोड के लिए एक अलग पथ निष्पादित करता है।
जोएल कोएहॉर्न

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

@JoelCoehoorn वास्तविक समस्या यह है कि आपने कभी नहीं समझाया कि "अपेक्षाकृत सख्त सिद्धांत" क्या है!
मिस्टर लिस्टर

0

एचटीएमएल 5 पेज में, " <!DOCTYPE html>" पेज के साथ शुरू करें, यह डॉक्यूमेंट में बदल सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.