บังคับให้ปิดโหมดความเข้ากันได้ของ IE โดยใช้แท็ก


375

ฉันกำลังทำงานให้กับลูกค้าที่บังคับใช้โหมดความเข้ากันได้กับไซต์อินทราเน็ตทั้งหมด ฉันสงสัยว่ามีแท็กที่ฉันสามารถใส่ลงใน HTML ที่บังคับให้ปิดโหมดความเข้ากันได้หรือไม่


ฉันคิดว่าคำตอบที่คุณกำลังมองหาอยู่ที่นี่: stackoverflow.com/questions/1014666/…
กาเบรียล

45
ที่จริงแล้วฉันกำลังมองหาสิ่งที่ตรงกันข้ามที่กำหนดมาตรฐานของโหมดความเข้ากันได้ที่บ้า
อัล Katawazi

12
จาวาสคริปต์ที่ไม่ถูกต้องในแอปรุ่นเก่าที่เกิดปัญหากับสิ่งอื่นที่ไม่ใช่ IE7 นั่นคือผู้กำหนดมาตรฐานให้เข้ากันได้ วันหนึ่งเราจะได้รับรอบเพื่อแทนที่มัน ...
พีทอิสลาม-gerbil

1
@ petethepagan-gerbil คุณไปไหนมาไหนเพื่อแทนที่มัน? : P
icedwater

1
@icedwater ฉันออกจาก บริษัท เมื่อ 6 ปีที่แล้ว :) เราทำการปรับปรุงเล็กน้อยเพื่อลบปัญหาเมื่อใดก็ตามที่เรามีการเปลี่ยนแปลงในพื้นที่เดียวกัน แต่หนี้เทคโนโลยีไม่เคยจัดลำดับความสำคัญที่นั่น ไม่รู้ว่าจะได้รับการแก้ไขในท้ายที่สุด
pete pagan-gerbil

คำตอบ:


535

มีโหมด "ขอบ" คือ

<html>
   <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge" />
      <title>My Web Page</title>
   </head>
   <body>
      <p>Content goes here.</p>
   </body>
</html>

จากหน้า MSDN ที่เชื่อมโยง:

โหมด Edge บอกให้ Windows Internet Explorer แสดงเนื้อหาในโหมดสูงสุดที่มีอยู่ซึ่งแบ่งกระบวนทัศน์ "ล็อค" ด้วย Internet Explorer 8 สิ่งนี้เทียบเท่ากับโหมด IE8 หาก Internet Explorer รุ่นต่อไป (สมมุติฐาน) รองรับโหมดความเข้ากันได้ที่สูงกว่าหน้าเว็บที่ตั้งค่าเป็น Edge จะปรากฏในโหมดสูงสุดที่รุ่นนั้นรองรับ อย่างไรก็ตามหน้าเดียวกันเหล่านั้นจะยังคงปรากฏในโหมด IE8 เมื่อดูด้วย Internet Explorer 8

อย่างไรก็ตามไม่สนับสนุนโหมด "edge" ในการใช้งานจริง:

ขอแนะนำให้นักพัฒนาเว็บ จำกัด การใช้โหมด Edge เพื่อทดสอบหน้าเว็บและการใช้งานที่ไม่ได้ใช้งานอื่น ๆ เนื่องจากอาจเกิดผลลัพธ์ที่ไม่คาดคิดจากการแสดงผลเนื้อหาของหน้าใน Windows Internet Explorer รุ่นอนาคต

ฉันไม่เข้าใจจริงๆว่าทำไม IE=8แต่ตามนี้วิธีที่ดีที่สุดที่จะไปในขณะที่มีการใช้


7
ตั้งแต่ 8/6/2012 Microsoft ดูเหมือนจะใช้งานIE=10บนไซต์ของตนเอง หากคุณได้ทดสอบเว็บไซต์ของคุณใน IE10 (เวอร์ชั่นตัวอย่าง) แสดงว่าปลอดภัยสำหรับการใช้งาน ไม่เช่นนั้นคุณอาจต้องการดำเนินการIE=9ในตอนนี้
calvinf

75
ฉันพบว่าสิ่งนี้ไม่ทำงานหากผู้ใช้ (หรือระบบดูแลระบบ) เปิดโหมดความเข้ากันได้เป็นค่าเริ่มต้นโดยไปที่Tools->Compatibility View Settingsและตรวจสอบแสดงเว็บไซต์ทั้งหมดในมุมมองที่เข้ากันได้ เพื่อแก้ไขปัญหาฉันต้องกลับส่วนหัวในการตอบสนอง HTTP:X-UA-Compatible: IE=edge
speedplane

10
+1 ถึง speedplane - โหมดความเข้ากันได้ของ IE10 เปิดอยู่ตามค่าเริ่มต้นสำหรับไซต์อินทราเน็ต - UGH ... ขอบคุณสำหรับการค้นหา!
viperguynaz

132
คำแนะนำสำหรับผู้ที่พบคำตอบนี้ แต่ไม่สามารถใช้งานได้สำหรับพวกเขา เมตาแท็กที่ใช้งานร่วมกันได้จะต้องเป็นเมตาแท็กแรกและจะต้องไม่มีคำสั่งแบบมีเงื่อนไข IE ก่อนแท็ก เพิ่มเติม: tesmond.blogspot.com/2011/10/…
Chris Sobolewski

2
ขอบคุณคริส! ฉันกำลังดิ้นรนกับสิ่งนี้เป็นเวลา 30 นาทีในที่สุดเมื่อฉันอ่านความคิดเห็นของคุณ ฉันไม่ได้มีมันก่อน
Hawkee

91

หลังจากผ่านไปหลายชั่วโมงแก้ปัญหาสิ่งนี้ ... ต่อไปนี้เป็นไฮไลท์ด่วนที่ช่วยเราจากX-UA-Compatibleเอกสาร: http://msdn.microsoft.com/en-us/library/cc288325(VS.85).aspx#ctl00_contentContainer_ctl16

การใช้ <meta http-equiv="X-UA-Compatible" content=" _______ " />

  • มาตรฐานตัวแทนของผู้ใช้โหมด (คนที่ไม่ได้เลียนแบบ) ไม่สนใจ<!DOCTYPE>คำสั่งในหน้าของคุณและแสดงผลบนพื้นฐานของมาตรฐานที่ได้รับการสนับสนุนโดยรุ่นของ IE ที่ (เช่นIE=8จะเชื่อฟังดีกว่าระยะห่างชายแดนตารางและบางเตอร์หลอกกว่าIE=7)

  • ในขณะที่โหมดจำลองบอกให้ IE ทำตาม<!DOCTYPE>คำสั่งใด ๆในหน้าของคุณโหมดการแสดงผลตามรุ่นที่คุณเลือกและโหมดนิสัยใจคอตามIE=5

  • ค่าที่เป็นไปได้สำหรับcontentแอตทริบิวต์คือ:

    content="IE=5"

    content="IE=7"

    content="IE=EmulateIE7"

    content="IE=8"

    content="IE=EmulateIE8"

    content="IE=9"

    content="IE=EmulateIE9"

    content="IE=edge"


67

หากคุณกำลังทำงานกับเพจในอินทราเน็ตโซนคุณอาจพบว่า IE9 ไม่ว่าคุณจะทำอะไรก็เข้าสู่โหมดการทำงานร่วมกันของ IE7

นี่คือสาเหตุที่การตั้งค่าภายในการตั้งค่าความเข้ากันได้ของ IE ซึ่งระบุว่าไซต์อินทราเน็ตทั้งหมดควรทำงานในโหมดความเข้ากันได้ คุณสามารถยกเลิกการเลือกนี้ได้ด้วยนโยบายกลุ่ม (หรือเพียงแค่ยกเลิกการเลือกธรรมดาใน IE) หรือคุณสามารถตั้งค่าต่อไปนี้:

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

งานนี้ (ตามรายละเอียดในคำตอบอื่น ๆ ) แต่อาจจะไม่ได้เริ่มต้นที่ปรากฏดังนั้น: มันต้องมาก่อนสไตล์ชีตที่มีการประกาศ ถ้าคุณทำไม่ได้มันจะถูกละเว้น


3
ขอบคุณสำหรับคำเตือนเกี่ยวกับสไตล์ชีทนี่เป็นสาเหตุของปัญหาและฉันรู้เหตุผลตอนนี้!
eMRe

ใช่เริ่มต้นโดยตำแหน่ง ขอบคุณที่เพิ่มสิ่งนี้
John Moylan

ขอบคุณที่มีประโยชน์มาก พวกเขามี GPO ที่ตั้งค่าระดับ IE ที่มีประสิทธิภาพที่ 7 แม้ว่าจะติดตั้ง IE 11 แล้ว สิ่งนี้ช่วยฉันจากการใส่ shims ในไซต์เพื่อให้ js ทำงาน
Charles Owen


28

ตามที่แนะนำในคำตอบสำหรับคำถามที่เกี่ยวข้องนี้โหมด "edge" สามารถตั้งค่าในไฟล์ Web.Config สิ่งนี้จะทำให้ใช้ได้กับ HTML ทั้งหมดที่ส่งคืนจากแอปพลิเคชันโดยไม่จำเป็นต้องแทรกลงในหน้าแต่ละหน้า:

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

ขั้นตอนเดียวกันนี้สามารถทำได้โดยการแก้ไข "HTTP Response Headers" โดยใช้ IIS Managerสำหรับเซิร์ฟเวอร์ IIS เว็บไซต์ทั้งหมดหรือแอปพลิเคชันเฉพาะ


19

เมตาแท็กโซลูชันไม่ทำงานสำหรับเรา แต่การตั้งค่าในส่วนหัวการตอบกลับทำได้:

header('X-UA-Compatible: IE=edge,chrome=1');

3
+1 สำหรับ 'chrome = 1'; ฉันไม่เคยรู้เรื่องนี้เลย สำหรับสิ่งที่คุ้มค่าให้เปลี่ยนเป็น IE = 10 ล้างปัญหาการเรนเดอร์จำนวนหนึ่งบนไซต์ของฉันที่ IE = edge ไม่มีผลกระทบ

ชี้แจงchrome=1คุณสมบัติstackoverflow.com/a/22059516/368691 โปรดทราบว่า Chrome Frame ถูกยกเลิกแล้ว blog.chromium.org/2013/06/retiring-chrome-frame.html
Gajus

1
ดูความคิดเห็นเกี่ยวกับคำตอบอื่น ๆ ... ฉันพบว่าสิ่งนี้ไม่ทำงานหากผู้ใช้ (หรือผู้ดูแลระบบ) เปิดโหมดความเข้ากันได้เป็นค่าเริ่มต้นโดยไปที่เครื่องมือ -> การตั้งค่ามุมมองที่เข้ากันได้และตรวจสอบแสดงเว็บไซต์ทั้งหมดในมุมมองที่เข้ากันได้ . speedplane 19 เม.ย. '13 ที่ 11:29 7 เมตาแท็กที่ใช้งานร่วมกันได้จะต้องเป็นเมตาแท็กแรกและจะต้องไม่มีคำสั่งแบบมีเงื่อนไข IE ก่อนแท็ก เพิ่มเติม: tesmond.blogspot.com/2011/10/… - Chris Sobolewski 19 ส.ค. 13 เวลา 20:23 น.
felickz

ฉันพยายามวางไว้ในบรรทัดแรกในหน้าเลย์เอาต์ มันไม่ทำงาน Stu กล่าวถึงการเปลี่ยน IIS HTTP Response Headers ฉันเหนื่อย. ฉันรีสตาร์ทแอพพูล ฉันตรวจสอบมากขึ้น นี่คือหน้าเว็บที่อยู่ภายใต้หน้าอื่น หน้าอื่นมีเมตาอีกอัน นี่คือเว็บไซต์การผลิต ผู้คนมากมายกำลังเข้าถึงหน้านี้ การวางแท็กนี้ไว้ด้านบนนั้นเป็นไปไม่ได้ วิธีแก้ปัญหาอื่น ๆ หรือฉันกรู
user12345

10

อีกไม่กี่บันทึกในหัวข้อนี้ขึ้นอยู่กับประสบการณ์ล่าสุดของฉัน มหาวิทยาลัยที่ฉันทำงานกับแล็ปท็อปที่มีปัญหา IE 8 ตั้งค่าเป็นโหมดความเข้ากันได้สำหรับไซต์อินทราเน็ตทั้งหมด ฉันพยายามเพิ่มเมตาแท็กเพื่อปิดการใช้งานโหมดนี้สำหรับหน้าเว็บที่เว็บไซต์ของฉันแสดง แต่ IE ไม่สนใจแท็กนี้อย่างสม่ำเสมอ ตามที่แลนซ์กล่าวถึงในโพสต์ของเขาการเพิ่มส่วนหัวการตอบสนองแก้ไขปัญหานี้ นี่คือวิธีที่ฉันตั้งค่าส่วนหัวตามวิธีการสร้างแผ่น HTML5:

<IfModule mod_headers.c>
  Header set X-UA-Compatible "IE=edge,chrome=1"
  # mod_headers can't match by content-type, but we don't want to send this header on *everything*...
  <FilesMatch "\.(appcache|crx|css|eot|gif|htc|ico|jpe?g|js|m4a|m4v|manifest|mp4|oex|oga|ogg|ogv|otf|pdf|png|safariextz|svg|svgz|ttf|vcf|webm|webp|woff|xml|xpi)$">
    Header unset X-UA-Compatible
  </FilesMatch>
</IfModule>

เพื่อให้ส่วนหัวนี้ถูกส่งจริงคุณต้องตรวจสอบให้แน่ใจว่าคุณได้เปิด mod_headers ใน Apache หากคุณต้องการตรวจสอบให้แน่ใจว่าคุณเปิดใช้งานโมเดอเรเตอร์นี้อยู่ในเพจที่สามารถรัน php ได้:

<pre>
<?php
    print_r(apache_get_modules());
?>
</pre>

วิธีการ. htaccess ใช้งานได้สำหรับฉันใน IE8 + มันลบปุ่มความเข้ากันได้ (aka ศัตรูหมายเลข 1) และบังคับให้ IE8 หลีกเลี่ยงการใช้โหมดความเข้ากันได้ เกี่ยวข้อง: เมตาแท็กทางเลือกดูเหมือนว่าจะทำงานภายใต้เงื่อนไขบางประการ (IE Voodoo) บนคอมพิวเตอร์หลายเครื่องเท่านั้น
William Isted

10

IE8 ใช้ค่าเริ่มต้นเป็นโหมดมาตรฐานสำหรับโหมด intERnet และ quirks สำหรับ intRAnet เมตาแท็ก HTML จะถูกข้ามหากคุณตั้งค่าประเภทเอกสารเป็น xhtml การนำส่ง ทางออกคือการเพิ่มส่วนหัว HTTP ในรหัส สิ่งนี้ใช้ได้สำหรับเรา ขณะนี้ไซต์อินทราเน็ตของเรากำลังบังคับให้ IE8 แสดงผลแอปในโหมดมาตรฐาน

เพิ่มไปยัง PageInit ของคลาสเพจพื้นฐาน (ASP.net C #):

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

การอ้างอิง: http://ilia.ws/archives/196-IE8-X-UA-Compatible-Rant.html


3

นี่คือสาเหตุที่การตั้งค่าภายในการตั้งค่าความเข้ากันได้ของ IE ซึ่งระบุว่าไซต์อินทราเน็ตทั้งหมดควรทำงานในโหมดความเข้ากันได้ คุณสามารถยกเลิกการเลือกนี้ได้ด้วยนโยบายกลุ่ม (หรือเพียงแค่ยกเลิกการเลือกธรรมดาใน IE) หรือคุณสามารถตั้งค่าต่อไปนี้:

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

เห็นได้ชัดว่ามันเป็นไปไม่ได้ที่จะเปลี่ยนการตั้งค่ามุมมองที่เข้ากันได้เป็นนโยบายกลุ่ม แต่มันเป็นสิ่งที่สามารถเปลี่ยนแปลงได้ในรีจิสทรีเมตาแท็กนี้ทำงานได้ดีสำหรับฉันฉันต้องทำให้แอตทริบิวต์ที่ต้องการทำงานเป็นส่วนหนึ่งของรูปแบบ html มันทำงานได้ในโครเมี่ยมและ Firefox แต่ไม่ใช่ IE

นี่คือภาพที่เห็นได้อย่างชัดเจนว่าเบราว์เซอร์ใดสนับสนุนแต่ละองค์ประกอบ html 5

http://html5readiness.com/

สังเกตเห็นว่า Google Chrome เป็นตัวหารร่วมที่รองรับทุกอย่าง หวังว่านี่จะช่วยได้


ดูเหมือนว่า Firefox และ IE 10 จะรองรับทุกอย่างเช่นกัน แผนภูมิไม่ทำให้ชัดเจนเท่าที่เป็นจริงสำหรับ Chrome
Tony L.

0

แทรกเป็นรายการแรกภายใต้แท็ก

สิ่งนี้บังคับให้ IE แสดงผลหน้าเว็บในเวอร์ชันจริงของ IE และไม่สนใจเบราว์เซอร์ "การตั้งค่าโหมด" สิ่งนี้สามารถตั้งค่าได้ในเครื่องมือสำหรับนักพัฒนาลองเปลี่ยนเป็น IE เวอร์ชันเก่าเพื่อทดสอบซึ่งควรละเว้นและหน้าควรมีลักษณะเหมือนกันทุกประการ


0

ถ้าคุณสามารถเข้าถึงเซิร์ฟเวอร์วิธีที่น่าเชื่อถือที่สุดในการทำเช่นนี้คือทำบนเซิร์ฟเวอร์ใน IIS ไปที่ IIS HTTP Response Headers เพิ่มชื่อ:
ค่าที่เข้ากันได้กับ X-UA : IE = edge สิ่งนี้จะแทนที่เบราว์เซอร์และรหัสของคุณ


ซึ่งจะรีเซ็ตการปรับใช้ใหม่เป็น IIS หากตั้งไว้ที่ระดับเว็บไซต์
Eman Pitts

0

หากคุณต้องการให้แต่ละหน้าเว็บโหลดเนื้อหาที่เลือกและใช้ asp.net เพียงใช้เป็นแท็กแรกภายใต้แท็กส่วนหัวใน Views> shared> Layout.cshtml

แค่ปลายนิ้ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.