internet explorer - इंट्रानेट संगतता मोड IE8 ओवरराइड करें




internet-explorer internet-explorer-8 (13)

डिफ़ॉल्ट रूप से IE8 इंट्रानेट वेबसाइटों को संगतता मोड में मजबूर करता है। मैंने आईई 8 में मेटा हेडर बदलने की कोशिश की, लेकिन यह मेटा हेडर को स्वीकार नहीं करता है और बस ब्राउज़र सेटिंग का उपयोग करता है। क्या किसी को यह पता है कि इसे कैसे अक्षम किया जाए?


इंट्रानेट में संगतता मोड को ओवरराइड करना संभव है।

आईआईएस के लिए, बस नीचे दिए गए कोड को web.config में जोड़ें। आईई 9 के साथ मेरे लिए काम किया।

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer> 

अपाचे के लिए समतुल्य:

Header set X-UA-Compatible: IE=Edge

और nginx के लिए:

add_header "X-UA-Compatible" "IE=Edge";

और express.js के लिए:

res.set('X-UA-Compatible', 'IE=Edge')

इस मेटाटैग को आज़माएं:

<meta http-equiv="X-UA-Compatible" content="IE=8" />

आईई 8 मानक मोड के रूप में प्रस्तुत करने के लिए आईई 8 को मजबूर करना चाहिए, भले ही "संगतता दृश्य में इंट्रानेट साइट प्रदर्शित करें" चेक किया गया हो [या तो इंट्रानेट या सभी वेबसाइटों के लिए], मैंने इसे IE 8.0.6 पर अपना स्वयं का प्रयास किया


इसे अपने पृष्ठों के शीर्ष टैग के अंदर जोड़ें (आईई संस्करण को लक्षित करना):

<meta http-equiv="X-UA-Compatible" content="IE=8" />  

ध्यान दें, यह इस तथ्य को नहीं बदलेगा कि ब्राउज़र इसकी संगतता मोड (ब्राउज़र मोड कहा जाता है) में कहता है, लेकिन पृष्ठ IE8 मानकों मोड में प्रस्तुत करेगा । यदि यह अभी भी आपकी इच्छानुसार प्रतिपादन नहीं कर रहा है, तो शायद इसकी वजह से आपके पास जावास्क्रिप्ट है जो आईई संस्करण की गलती से जांच कर रहा है। यह निर्धारित करने के blogs.msdn.com/b/mikeormond/archive/2008/09/25/… देखें blogs.msdn.com/b/mikeormond/archive/2008/09/25/… आपको किस संपत्ति को बंद करना चाहिए क्योंकि यहां तक ​​कि यदि आप मेटा एक्स-यूए-संगत टैग सेट करते हैं, तो उपयोगकर्ता एजेंट स्ट्रिंग अभी भी एमएसआईई 7.0 कहेंगे

मेरे मामले में, फिक्स के लिए मुझे आईई 7 संगतता मोड के लिए एक चेक जोड़ना पड़ा। मैंने एक साधारण जावास्क्रिप्ट कोड का उपयोग करके ऐसा किया:

                //IE8 and later will have the word 'trident' in its user agent string.
                if (navigator.userAgent.indexOf("Trident")>-1) { //do something }

एक ही समस्या थी। यह उपयोग करके काम किया

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />

माइकल इरिगोयेन सही है लेकिन यह थोड़ा और जटिल है ...

यदि आप पॉल आयरिश द्वारा अद्भुत बॉयलरप्लेट का उपयोग कर रहे हैं तो आपके पास निम्न की तरह कुछ होगा: -

<!doctype html>
<!--[if lt IE 7]> <html class="no-js ie6 oldie" lang="en"> <![endif]-->
<!--[if IE 7]>    <html class="no-js ie7 oldie" lang="en"> <![endif]-->
<!--[if IE 8]>    <html class="no-js ie8 oldie" lang="en"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en"> <!--<![endif]-->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

यदि आपके पास "संगतता दृश्य में इंट्रानेट साइट प्रदर्शित करें" चेक किया गया है, तो यह इंट्रानेट वातावरण में आईई में संगतता मोड में अपेक्षित और बल के रूप में काम नहीं करेगा। इंट्रानेट संगतता मोड को रोकने के लिए आपको सशर्त आईई टिप्पणियों को हटाने की आवश्यकता है।

तो निम्न कोड काम करेगा:

<!doctype html>
<html class="no-js" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">

असल में यदि आप <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> कथन से पहले सशर्त आईई टिप्पणियां ट्रिगर करते हैं तो आपको इंट्रानेट वातावरण में संगतता मोड में मजबूर होना होगा यदि आप हैं डिफ़ॉल्ट सेटिंग्स के साथ IE9 चल रहा है।

अद्यतन - अतिरिक्त जानकारी: लेकिन ध्यान दें कि एक चाल है जो HTML5 boilplate काम करेगी:

DOCTYPE से पहले एक emtpy, सशर्त टिप्पणी जोड़ें। और साथ ही ध्यान दें, कि जब आप ऐसा करते हैं , तो आप X-UA-Compatible निर्देश के आसपास सशर्त टिप्पणियां भी जोड़ सकते हैं , जिससे पेज HTML5-मान्य भी हो सकता है। तो उदाहरण के लिए:

<!--[if HTML5]><![endif]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->

एक ब्लॉग पोस्ट जो इस उत्तर के पहले भाग से प्रेरित था , में अधिक जानकारी है। और वैसे: जैसा कि ब्लॉग पोस्ट में उल्लिखित है, कोई भी शर्त के साथ अर्ध सशर्त टिप्पणी के साथ DOCTYPE से पहले सशर्त टिप्पणी को प्रतिस्थापित कर सकता है: <!--[]--> । इस प्रकार, इस तरह:

<!--[]-->
<!doctype html>
<!--[if the boilerplate conditionals goes here<![endif]-->
<head>
<!--[if !HTML5]>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<![endif]-->

लेकिन ध्यान दें कि बाद वाला संस्करण ( <--[]--><!DOCTYPE html> ) जैसा समझाया गया है, उदाहरण के लिए किसी अन्य प्रश्न के उत्तर में , अच्छी तरह से पता समस्या को सक्रिय करें - विरासत आईई संस्करणों के लिए X-UA-Compatioble समर्थन के बिना X-UA-Compatioble (पढ़ें: आईई 7 और आईई 6 के लिए) - ब्राउज़र को X-UA-Compatioble -मोड में लाएं।


मुझे एक कामकाजी उत्तर मिला जो चेक किए गए इंट्रानेट संगतता दृश्य को ओवरराइड करने की अनुमति देता है। बस इस पृष्ठ पर अपने पृष्ठ की ऑनइनिट घटना में जोड़ें (कोई मेटा या web.config customHeader की आवश्यकता नहीं है):

Response.AddHeader("X-UA-Compatible", "IE=EmulateIE8");

मैंने इस मुद्दे से संघर्ष किया था और एक अद्वितीय समाधान और अंतर्दृष्टि प्रदान करने में मदद करना चाहता था।

कुछ AJAX आधारित ढांचे <head> की शुरुआत में जावास्क्रिप्ट और स्टाइलशीट को इंजेक्ट करेंगे और ऐसा करने से अच्छी तरह से स्थापित मेटा टैग समाधान को ठीक से काम करने से रोका जा सकता है। इस मामले में मैंने पाया कि सीधे HTTP प्रतिक्रिया शीर्षलेख में इंजेक्शन, एंड्रेस सीसी के उत्तर की तरह समस्या को हल करेगा।

जावा सर्लेट्स का उपयोग करने वाले हमारे लिए, हालांकि, इसे हल करने का एक अच्छा तरीका ServletFilter का उपयोग करना है।

public class EmulateFilter implements Filter {

@Override
public void destroy() {
}

@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
        FilterChain arg2) throws IOException, ServletException {
    HttpServletResponse response = ((HttpServletResponse)arg1);
    response.addHeader("X-UA-Compatible", "IE=8");
    arg2.doFilter(arg0, arg1);
}

@Override
public void init(FilterConfig arg0) throws ServletException {
}

}

यदि आप "टूल्स" मेनू को नीचे खींचते हैं और "संगतता दृश्य सेटिंग्स" का चयन करते हैं तो नीचे दिए गए संवाद पर एक सेटिंग "संगतता मोड में इंट्रानेट साइट प्रदर्शित करें" है। यदि आप इसे अनचेक करते हैं जो समस्या को हल करना चाहिए और IE DOCTYPE के आधार पर मोड का उपयोग करेगा।


यह प्रश्न इंट्रानेट में फोर्स "इंटरनेट एक्सप्लोरर 8" ब्राउज़र मोड का डुप्लिकेट है।

वहां प्रतिक्रियाएं इंगित करती हैं कि संगतता दृश्य (सर्वर पक्ष पर) को अक्षम करना संभव नहीं है - https://.com/a/4130343/24267 । यह निश्चित रूप से मामला प्रतीत होता है, क्योंकि मैंने सुझाए गए सुझावों में से कोई भी काम नहीं किया है। आईई 8 में "ब्राउज़र मोड" इंटरनेट एक्सप्लोरर 8 संगतता दृश्य पर सेट हो जाता है इससे कोई फर्क नहीं पड़ता कि आप किस प्रकार का एक्स-यूए-संगत हेडर भेजते हैं।

मुझे आईई 7 और संगतता मोड के लिए कुछ विशेष हैंडलिंग करना पड़ा, जिसने ब्राउजर को IE8 का उपयोग करने के लिए प्रस्तुत किया लेकिन रिपोर्ट आईई 7 थी, मेरा कोड तोड़ दिया। इस तरह मैंने अपना कोड तय किया है (मुझे पता है कि यह एक भयानक हैक है और मुझे सुविधाओं के लिए परीक्षण करना चाहिए ब्राउज़र संस्करण नहीं):

isIE8 = navigator.appVersion.indexOf("MSIE") != -1 && parseFloat(navigator.appVersion.split("MSIE")[1]) == 8;
if (!isIE8 && navigator.appVersion.indexOf("MSIE") != -1 && parseFloat(navigator.appVersion.split("MSIE")[1]) == 7 && navigator.appVersion.indexOf("Trident") != -1) {
    // Liar, this is IE8 in compatibility mode.
    isIE8 = true;
}

यह वास्तव में एक समाधान नहीं है, लेकिन मुझे लगता है कि यह सबसे अच्छा है। हमारी इंट्रानेट साइटों पर हम लोगों को बताते हैं कि इसे केवल फ़ायरफ़ॉक्स द्वारा एक्सेस किया जा सकता है, हम यहां आईई उपयोगकर्ताओं को कृपया ध्यान से नहीं लेते हैं। सर्वर एजेंट या क्लाइंट पक्ष पर उपयोगकर्ता एजेंट की जांच करें और उन्हें IE से एक्सेस अस्वीकार करें। और मैं एक .NET प्रोग्रामर हूँ।


स्टीफन एस 'दस्तावेज़ मोड बनाम ब्राउज़र मोड के बारे में टिप्पणी मेरी समस्या के लिए बहुत प्रासंगिक थी।

मेरे पास पृष्ठ में एक्स-यूए-सामग्री मेटा डेटा है, लेकिन मैं क्लाइंट-साइड navigator.appVersion माध्यम से ब्राउज़र संस्करण का परीक्षण कर रहा था। यह परीक्षण मेटा डेटा को प्रतिबिंबित नहीं करता है क्योंकि यह ब्राउज़र मोड को दस्तावेज़ मोड नहीं दे रहा है।

मेरे लिए जवाब document.documentMode का परीक्षण करना था। document.documentMode कुछ ऐसा है:

function IsIE(n)
{
    if (navigator.appVersion.indexOf("MSIE ") == -1) return false;
    var sDocMode = document.documentMode;
    return (isFinite(sDocMode) && sDocMode==n);
}

अब, मेरा मेटा एक्स-यूए-सामग्री टैग मेरे ब्राउज़र परीक्षण में दर्शाता है।

ब्राउज़र की जांच के रूप में मैं इतनी भयानक चीज क्यों करता हूं? स्पीड। मेरे कई jQuery ऐड-इन्स, जैसे कि टेलिफोनर आईई 6/7 पर बहुत धीमी हैं, और मैं उन्हें बंद करना चाहता हूं। मुझे यकीन नहीं है कि ब्राउज़र सुविधाओं के लिए परीक्षण मुझे अन्यथा हल करने में मदद कर सकता है।


हम RequestInterceptor विधि में एक एकल पंक्ति जोड़कर स्प्रिंग-अपाचे-टॉमकैट पर्यावरण में इस समस्या को हल कर सकते हैं -

//before the actual handler will be executed
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)
throws Exception {

// Some logic

// below statement ensures IE trusts the page formatting and will render it acc. to IE 8 standard.
response.addHeader("X-UA-Compatible", "IE=8"); 

return true;
}

संदर्भ - फ़िल्टर कैसे बनाएं और प्रतिक्रिया शीर्षलेख को संशोधित करें यह शामिल है कि हम इस समस्या को RequestInterceptor (Spring) के माध्यम से कैसे हल कर सकते हैं।


हेडैक में हेडर को बदलें

BrowserMatch MSIE ie
Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie

इस समस्या का समाधान यहां मिला: https://github.com/h5bp/html5-boilerplate/issues/378





compatibility-mode