जावास्क्रिप्ट: क्या मैं IE9 का पता लगा सकता हूँ अगर यह IE7 या IE8 संगतता मोड में है?


87

मुझे यह जानने की जरूरत है कि क्या ब्राउज़र जो IE7 या IE8 के रूप में उपयोगकर्ता एजेंट स्ट्रिंग के माध्यम से खुद की पहचान कर रहा है, क्या वास्तव में वे ब्राउज़र हैं, या यह 7 या 8 संगतता मोड में IE9 है या नहीं।

मैं उपयोगकर्ता एजेंट स्ट्रिंग में क्या देख सकता हूं, IE7 संगतता मोड में एक IE9, एक वास्तविक IE7 को एक समान स्ट्रिंग प्रदान करता है। क्या कोई अतिरिक्त संपत्ति / तत्व / वस्तु है जिसे मैं यह देखने के लिए परीक्षण कर सकता हूं कि क्या यह "वास्तव में" IE9 भेस में है?

मुझे लगता है कि दस्तावेज़ मोड मदद नहीं करेगा क्योंकि मेरी स्क्रिप्ट जिस पृष्ठ में भरी हुई है वह या तो क्वर्की के लिए मजबूर हो सकती है या किसी विशिष्ट सेटिंग के लिए मजबूर हो सकती है।

मैं उम्मीद कर रहा हूं कि IE9 में कुछ संपत्ति होगी जो मौजूद है और यह 7, 8 या 9 मोड में है या नहीं इसकी परवाह किए बिना परीक्षण योग्य है।


जोड़ने के लिए संपादित ...

ठीक है, मैं देखता हूं कि मैं अब कहां गलत हो रहा था। मैं "ब्राउज़र मोड" ड्रॉपडाउन का उपयोग कर रहा था और इसे IE8 और IE7 पर स्विच कर रहा था और सोच रहा था कि यह क्रमशः "IE8 संगतता मोड" और "IE7 संगतता मोड" है। यह बिल्कुल सच नहीं है। डेवलपर टूल का ब्राउज़र मोड वास्तव में इसे उन पुराने ब्राउज़रों को "पसंद" करने के लिए स्विच कर रहा है, इसलिए यह केवल सही है कि मूल उपयोगकर्ता के तार रिपोर्ट किए गए हैं।

यदि मैं IE9 या IE9 संगतता में ब्राउज़र मोड छोड़ता हूं और इसके बजाय दस्तावेज़ मोड ड्रॉपडाउन वेरिएंट की कोशिश करता हूं, तो मैं वास्तव में सभी 8 संयोजनों (दो ब्राउज़र मोड और 4 दस्तावेज़ मोड) में "ट्राइडेंट / 5.0" प्राप्त करता हूं। मुझे बस ब्राउज़र मोड IE7 और IE8 को चुनने की स्पष्टता की आवश्यकता है क्योंकि वे वास्तव में IE7 और IE8 (सिम्युलेटेड) हैं।

तो कोई रास्ता नहीं है एक पृष्ठ, एक गैर-डेवलपर उपयोगकर्ता, एक मेटा टैग या Microsoft की संगतता सूची IE9 को इस अज्ञात स्थिति में डाल सकेगी।

बस उपयोग if(navigator.userAgent.indexOf("Trident/5")>-1)पर्याप्त होगा।

चिंता मत करो, यह शैलियों, स्वरूपण, तर्क या पृष्ठ सामग्री के लिए नहीं है। मैं उन चीजों के लिए फीचर डिटेक्शन का उपयोग करता हूं। मुझे बस IE9 का पता लगाने की आवश्यकता है (चाहे वह किस मोड में है) और उस पर एक गैर-पृष्ठ सामग्री निर्णय लें।

अपने सुझाव और लिंक के साथ उत्तर की ओर मुझे धन्यवाद देने के लिए धन्यवाद।


1
उपयोगकर्ता एजेंट पर कभी भरोसा न करें ... यह पूरी तरह से झूठ हो सकता है और यह सुनिश्चित करने का कोई तरीका नहीं है कि यह सच कह रहा है या नहीं ... आपको इसके बजाय विशिष्ट कार्यों या विशेषताओं के लिए परीक्षण करना चाहिए
JCOC611

2
@ JCOC611 हाँ और नहीं। यह एक विशिष्ट प्रश्न है कि कैसे पता लगाया जाए कि क्या यह संगतता दृश्य में IE9 है, जो एक उचित प्रश्न है। सामान्य तौर पर किसी को साइट की कार्यक्षमता के लिए उपयोगकर्ता एजेंट स्ट्रिंग्स पर भरोसा नहीं करना चाहिए क्योंकि कोई भी इसे आसानी से सच मान सकता है।
डेनिस जी

1
भले ही उपयोगकर्ता एजेंट सटीक हो, लेकिन यदि संभव हो तो फीचर डिटेक्शन का उपयोग करना बहुत बेहतर है। फिर, आपको यह जानने की आवश्यकता नहीं है कि पहली जगह में IE संगतता मोड में है या नहीं।
डेव वार्ड

1
मैं सिर्फ यह जोड़ना चाहता हूं कि यह बहुत उपयोगी है यदि आप उन उपयोगकर्ताओं को एक त्वरित ट्यूटोरियल प्रदान करना चाहते हैं जो एक गलत ब्राउज़र मोड का उपयोग कर रहे हैं।
Joost

1
@ JCOC611 जो अपने उपयोगकर्ता को खराब कर देगा और चीजों को सही तरीके से काम करने की उम्मीद करेगा - क्या हमें वास्तव में उस मामले की परवाह करनी चाहिए?
जॉनीफाल्डो

जवाबों:


67

वास्तव में IE7 संगतता मोड में चलने पर IE9 के लिए उपयोगकर्ता एजेंट स्ट्रिंग अलग है, इसलिए यह विभिन्न IE संस्करणों के बीच अंतर करने के सर्वोत्तम तरीकों में से एक होगा।

पेश है IE9 का यूजर एजेंट स्ट्रिंग :

IE8 के समान, IE9 की संगतता दृश्य IE7 मानक मोड में मैप होगी, और IE9 की UA स्ट्रिंग जब संगतता दृश्य में होगी:

Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/5.0)

संगतता दृश्य में, IE9 आवेदन संस्करण संख्या (मोज़िला / 4.0) और संस्करण टोकन (MSIE 7.0) के माध्यम से IE7 के रूप में रिपोर्ट करता है। यह संगतता के लिए किया जाता है। 'ट्रिडेंट / 4.0' से लेकर 'ट्राइडेंट / 5.0' तक एक बढ़ा हुआ ट्राइडेंट टोकन, वेबसाइट्स को IE9 को कम्पोज़िट व्यू में चलने और IE8 को कम्पोज़िट व्यू में चलने में अंतर करने की अनुमति देता है

(मेरे द्वारा जोड़ा गया जोर)। इसलिए यूजर एजेंट स्ट्रिंग वही है जो खुद "मोज़िला / 4.0" और MSIE 7.0 होने की रिपोर्ट करता है, लेकिन IE9 हमेशा Trident / 5.0 होगा - चाहे वह MSIE 7.0, MSIE 8.0 या MSIE 9.0 कहे।

वास्तव में आपको इस महान संकलन की जांच करनी चाहिए: ब्राउज़र आईडी (उपयोगकर्ता-एजेंट) स्ट्रिंग्स या बेहतर useragentstrings.com


1
हाय मोहतरमा। मैंने यह भी देखा कि IE7 मोड में IE9 होने पर "ट्राइडेंट / 5.0" मौजूद होना चाहिए, लेकिन ऐसा नहीं है जो मैं Win7 Pro x64 पर अपने (अंतिम) IE9 पर देख रहा हूं। यह IE7 मोड में बिल्कुल भी त्रिशूल नहीं दिखा रहा है (जो कि वास्तविक IE7 जैसा दिखता है) और यह IE8 मोड में फिर से त्रिशूल 4 दिखा रहा है (फिर से, वास्तविक IE8 कैसा दिखता है)। मैं IE9 डेवलपर टूल का उपयोग ब्राउज़र मोड का चयन करने के लिए पहले ड्रॉप-डाउन करता हूं और फिर एड्रेस बार में जावास्क्रिप्ट को सचेत करता
हूं

1
"ट्राइडेंट / 5.0" सभी मोड में IE9 के उपयोगकर्ता-एजेंट स्ट्रिंग में मौजूद है।
एरिकलाव

जैसा कि एरिकला कहता है, डी। जब आप संगतता मोड का उपयोग कर रहे हों तो ट्राइडेंट / 5.0 मौजूद होना चाहिए (ब्राउज़र मोड के लिए अलग हो सकता है?)। आप उपयोगकर्ता एजेंट स्ट्रिंग की जांच कैसे करते हैं? Whatsmyuseragent.com के माध्यम से जाँच करने और वापस रिपोर्ट करने का प्रयास करें ।
डेनिस जी

नीचे मेरी प्रतिक्रिया देखें (मुझे आपके अन्य संदेश पर प्रतिक्रिया जोड़ने के बारे में 8 घंटे के नियम के ढेर के कारण एक और आईडी डीई 200 का उपयोग करना था)। हाँ एरिक और Moontear हैं दोनों सही, ट्राइडेंट / 5.0 है IE9 के मोड के सभी में मौजूद। मेरी बड़ी गलती डेवलपर टूल में "ब्राउज़र मोड" को IE7 या IE8 में बदल रही थी, लेकिन यह "मोड" नहीं है कि एक पेज / मेटा टैग / संगतता सूची लागू कर सकती है। इसके बजाय यह वास्तव में खुद ब्राउज़र का अनुकरण कर रहा है, इसलिए स्वाभाविक रूप से उपयोगकर्ता स्ट्रिंग वास्तव में IE7 / 8 की तरह है।
डेव2000

1
यह पूर्ण है! बहुत बहुत धन्यवाद। मैं रिपोर्ट किए गए ब्राउज़र के आधार पर शैली नहीं करता हूं, लेकिन मैं उस साइट के शीर्ष पर एक चेतावनी पट्टी स्थापित कर रहा हूं जिस पर मैं काम कर रहा हूं, जिसमें कहा गया है कि उपयोगकर्ता को अपग्रेड करने की आवश्यकता है (यदि सशर्त टैग कहते हैं कि यह 7 से कम या बराबर है) - मैं नहीं चाहता कि संदेश इस मामले में अपग्रेड कहे, बल्कि कम्पैटिबिलिटी मोड को डिसेबल कर दे
चेल्सी Urquhart

47

document.documentMode दस्तावेज़ मोड के लिए सबसे अच्छा तरीका है।


17
कृपया उत्तर को थोड़ा विस्तारित करें। अधिक संदर्भ।
random_user_name

3
लोग इसे
प्लस

5
यह वास्तव में सबसे अच्छा तरीका है। आप इसे इस तरह से उपयोग कर सकते हैं <script> if (document.documentMode == 7) alert("Yo, put it in its normal mode, will ya?") </script>:। वास्तविक (!) IE7 और सभी गैर-IE 'अपरिभाषित' लौटाते हैं, केवल Comp में IE8 / 9। मोड वापसी 7. मैं IE10 का परीक्षण नहीं कर सकता, लेकिन यह समान होना चाहिए।
फ्रैंक कॉनिजन

2
बस IE10 में किनारे मेटा टैग के साथ एक तरफ यह कोशिश की; सामान्य तौर पर, यह "10" देता है। सभी साइटों के लिए बल संगतता मोड, और यह अभी भी "10" देता है।
व्हेलकहोलिज़्म

IE10 और IE11 पूर्वावलोकन में मेरे लिए काम करता है
सिमोन

20

IE7 में त्रिशूल पर कोई जानकारी नहीं है

User-Agent : Mozilla/4.0 (compatible; MSIE 7.0)

IE8 में यह स्ट्रिंग है: "ट्राइडेंट / 4.0"

User-Agent : Mozilla/4.0 (compatible; MSIE 8.0; Trident/4.0)

IE9 में यह स्ट्रिंग है: "ट्राइडेंट / 5.0"

IE9 संगतता मोड में:

User-Agent : Mozilla/4.0 (compatible; MSIE 7.0; Trident/5.0)

सामान्य मोड में IE9:

User-Agent : Mozilla/5.0 (compatible; MSIE 9.0; Trident/5.0)

1
यह बहुत अच्छा है, IE10 वेतन वृद्धि त्रिशूल भी करता है?
स्लिटशाइप

3
इंटरनेट एक्सप्लोरर 10 यूजर्स ट्राइडेंट / 6.0 .... blogs.msdn.com/b/ie/archive/2012/07/12/… पर
स्लटइशटाइप

1
और IE11
Dee2000


11

मैं उम्मीद कर रहा हूं कि IE9 में कुछ संपत्ति होगी जो मौजूद है और यह 7, 8 या 9 मोड में है या नहीं इसकी परवाह किए बिना परीक्षण योग्य है।

शैली के लिए उदाहरण की जाँच करें। शुद्धता , यह IE9 में पेश किया गया था और संगतता-मोड की परवाह किए बिना उपलब्ध है:

<![if IE]> 
<script>
if(typeof document.documentElement.style.opacity!='undefined')
{
  //this must be at least IE9 
}
</script>
<![endif]>

1
धन्यवाद Dr.Molle, मैं देता हूँ कि एक कोशिश और वापस रिपोर्ट।
डे २ २०

दुर्भाग्य से यह केवल ब्राउज़र मोड के लिए काम करता है (आईई 9 डेवलपर टूल में बाएं हाथ से ड्रॉप-डाउन)। यह दस्तावेज़ मोड के लिए काम नहीं करता है (दाएं हाथ से ड्रॉप डाउन)। दस्तावेज़ मोड के लिए, यह केवल IE9 दस्तावेज़ मोड में काम करता है। यदि यह IE8, IE7 या Quirks मोड में है, तो वह तर्क विफल हो जाता है।
22 नवंबर को डीईएन 2

7
धिक्कार है, तुम्हारा अधिकार। मुझे एक और संपत्ति मिली, मेरे लिए हर विधा में काम करती है: window.performance
Dr.Molle

@ Dee2000: यह मेरे लिए DocumentMode के साथ भी काम करता है। Ie केवल अगर DocumentMode = "Internet Explorer 9 मानक" यह परीक्षण सफल होता है।
निकलैस बैक्मैन

@ Dr.Molle इसके लिए धन्यवाद, window.performance अच्छी तरह से काम करता है।
१५:०५ पर lewsid

3

यह कभी-कभी आवश्यक होता है कि यूजर एजेंट स्ट्रिंग को सर्वर वेरिएबल से पढ़े, ना कि जावास्क्रिप्ट नेविगेटर ऑब्जेक्ट से।

मतभेदों की तुलना करें:

  • एएसपी क्लासिक, IE11

    • क्लाइंट जावास्क्रिप्ट, navigator.userAgent: " मोज़िला / 5.0 (संगत; MSIE 9.0; Windows NT 6.1; WOW64; त्रिशूल / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5 .30729; .NET CLR 3.0.30729; मीडिया सेंटर PC 6.0; .NET4.0C; .NET4.0E; BOIE9; ENUS) "

    • सर्वर ASP, Request.ServerVariables ("HTTP_USER_AGENT"): " मोज़िला / 5.0 (Windows NT 6.1; WOW64; त्रिशूल / 7.0; BOIE9; ENUS; rv: 11.0) जियो की तरह "

  • एएसपी क्लासिक, IE11 संगतता मोड :

    • क्लाइंट जावास्क्रिप्ट, navigator.userAgent: " मोज़िला / 5.0 (संगत; MSIE 9.0; विंडोज़ NT 6.1; WOW64; त्रिशूल / 7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5 .30729; .NET CLR 3.0.30729; मीडिया सेंटर PC 6.0; .NET4.0C; .NET4.0E; BOIE9; ENUS)) "

    • सर्वर ASP, Request.ServerVariables ("HTTP_USER_AGENT"): " मोज़िला / 4.0 (संगत; MSIE 7.0; Windows NT 6.1; WOW64; त्रिशूल / 7.0; SLCC2; .NET CLR 2.0.50.5027; .NET CLR 3.5.30729; NET) CLR 3.0.30729; मीडिया सेंटर PC 6.0; .NET4.0C; .NET4.0E; BOIE9; ENE) "


0

से https://stackoverflow.com/a/29288153/2879498

मान लें कि आपके पास आईडी कॉम्पिटिटर-चेतावनी के साथ एक छिपा हुआ तत्व है:

जावास्क्रिप्ट w / jQuery:

$(function(){
    function showCompatWarning() {
        $('#compat-warning')
            .css('display','block')
            .css('height','auto')
            .show();
    }
    var tridentOffset = navigator.appVersion.indexOf('Trident/');
    if ( tridentOffset === -1 ) return;
    var jscriptVersion = 0;
    /*@cc_on @*/
    /*@if (@_jscript) jscriptVersion = @_jscript_version ; @*/;
    /*@end @*/
    var tridentVersion = parseInt(navigator.appVersion.substr(tridentOffset+8),10);
    var guessIEVersion = tridentVersion + 4;
    if (( document.documentMode && jscriptVersion && jscriptVersion < 10 && jscriptVersion !== document.documentMode ) ||
        ( document.compatMode && document.compatMode === 'BackCompat') ||
        ( document.documentMode && document.documentMode < 10 && document.documentMode != guessIEVersion ))
        showCompatWarning();
});

अनुकूलता नरक के खिलाफ बचाव की चेतावनी और चेतावनी, आपकी पहली और आखिरी पंक्तियाँ।

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