2012-10-29 17 views
8

मैं किसी प्रकार की जावास्क्रिप्ट लाइब्रेरी विकसित कर रहा हूं। और मैं समस्या का कारण बनता हूं कि मेरे पास कुछ विशिष्ट समस्याएं हैं: ब्राउज़र: IE8/IE9 और दस्तावेज़ मोड: IE7 मुझे समाधान मिला, लेकिन मैं इसे सभी परिस्थितियों में उपयोग नहीं करना चाहता, और इसे केवल तब उपयोग करना चाहता हूं मेरे पास ऊपर वर्णित स्थिति है। मुझे पता है कि मैं का उपयोग करके ब्राउज़र की पहचान कर सकते हैं:ब्राउज़र "दस्तावेज़ मोड" कैसे प्राप्त करें

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

लेकिन मैं इस तरह से नहीं बल्कि दस्तावेज़ मोड में सिर्फ ब्राउज़र संस्करण समझते हैं, और मैं जब मेरे पास है, उदाहरण के लिए, ब्राउज़र मेरी समाधान का उपयोग नहीं करना चाहते हैं मोड आईई 8 और दस्तावेज़ मोड आईई 8. क्या आईई में पेज दस्तावेज़ मोड प्राप्त करने का कोई तरीका है? अग्रिम में धन्यवाद।

उत्तर

27

आप document.documentMode का उपयोग कर सकते हैं कि वास्तव में कौन से दस्तावेज़ मोड IE का उपयोग कर रहे हैं।

मतलब यह है कि यदि आपका ब्राउज़र मोड IE9 पर सेट है, लेकिन आपका दस्तावेज़ मोड IE8 पर है तो यह document.documentMode == 8 लौटाएगा (जबकि उपयोगकर्ता एंजेंट स्ट्रिंग अभी भी IE9 के रूप में दिखाई देगी)। यह विशेष रूप से उपयोगी होता है यदि आपके जेएस में स्टाइलिंग परिवर्तन शामिल हैं क्योंकि यह दस्तावेज़ मोड है जो यह निर्धारित करता है कि आईई कैसे एक पृष्ठ प्रस्तुत करता है, ब्राउज़र मोड नहीं। संगतता मोड वास्तव में दस्तावेज़ मोड को बदलता है (आमतौर पर आईई 7 पर)।

कुछ मामलों मैं मैं करने के लिए आवश्यक कर दिया है में सिर्फ IE के अंतर करने के लिए कुछ इस तरह उपयोग किया है:

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

आशा है कि कुछ मदद मिलती है।

+0

क्या मैं दस्तावेज़ मोड सेट कर सकता हूं। मान लीजिए कि (document.documentMode == 8) {set document.documentmode किसी भी मान पर} –

+0

दुर्भाग्य से आप इसे जावास्क्रिप्ट से सेट नहीं कर सकते हैं। लेकिन आप वांछित आईई मोड निर्दिष्ट करने के लिए x-ua-compatability मेटा टैग का उपयोग कर सकते हैं। ध्यान दें कि यह IE के विरासत संस्करणों पर काम करेगा (उदा। IE11 + नहीं)। इसे और अधिक जानकारी के लिए पढ़ें: http://msdn.microsoft.com/en-us/library/jj676915(v=vs.85).aspx –

+2

ध्यान दें कि 'document.documentMode' केवल IE8 + में समर्थित है, इसलिए आप' यदि आपको मूल आईई 7 प्रतिपादन को लक्षित करने की आवश्यकता है तो आपको अतिरिक्त 'फीचर-डिटेक्शन' की आवश्यकता होगी। – WynandB

1

मैं कैसे दस्तावेज़ मोड पुनः प्राप्त करने के पता नहीं है, लेकिन यह एक और अधिक बुनियादी तरह से समस्या का समाधान करने बुद्धिमान हो सकता है। मान लीजिए कि आप अपनी स्क्रिप्टिंग में document.querySelector का उपयोग करना चाहते थे। यह IE8/दस्तावेज़ मोड IE7 मानकों में विफल हो जाएगा। document.documentMode का उपयोग करें:

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

दस्तावेज़ मोड के लिए जाँच करने के लिए एक रास्ता मिल गया: तो document.querySelector खुद के अस्तित्व के लिए एक अतिरिक्त जांच समाधान होगा। यह एक पूर्णांक देता है (इसलिए दस्तावेज़ मोड आईई 7 मानकों के लिए 7), Quirks mode के लिए 5। गैर आईई ब्राउज़र के लिए यह undefined होगा।

+0

हाँ thx यह अच्छा विचार है, लेकिन मुझे जावास्क्रिप्ट या कुछ मिस्ड फ़ंक्शन में विफल नहीं हुआ है, मेरे पास अलग-अलग दस्तावेज़ मोड में एक ही फ़ंक्शन का कुछ अलग व्यवहार है। आपके समाधान का उपयोग करने का एक और तरीका शायद आप कुछ फ़ंक्शन जानते हैं जो "DocumentMode IE7" के अंतर्गत काम नहीं करेगा? अगर मुझे ऐसा फ़ंक्शन मिल जाता है तो मैं दस्तावेज़ मोड को पहचानने के लिए इसका उपयोग कर सकता हूं। – Mikhail

+0

ठीक है, 'document.querySelector' docmode IE7 में काम नहीं करता है;)। वैसे भी, एक उपयोगी आईई-दस्तावेज़ संपत्ति मिली, अद्यतन उत्तर देखें। – KooiInc

+0

ध्यान दें कि document.documentMode केवल IE8 + में समर्थित है, इसलिए आपको मूल IE7 प्रतिपादन को लक्षित करने की आवश्यकता होने पर अतिरिक्त 'सुविधा-पहचान' की आवश्यकता होगी। – WynandB

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