IE10 แสดงผลในโหมด IE7 วิธีบังคับใช้โหมดมาตรฐาน


121

ในเว็บไซต์ของไมโครซอฟท์พวกเขาอ้างว่าการประกาศประเภทหลักง่ายๆก็เพียงพอแล้ว แต่ถึงแม้เอกสารจะสั้นเท่านี้ก็กลับสู่โหมด IE7:

<!DOCTYPE html>
<html>
<head>
   <title></title>
</head>
<body>

</body>
</html>

http://d.pr/i/fvzb+

คำตอบ:


244

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

เพื่อให้แน่ใจว่าเว็บไซต์ของคุณใช้โหมดมาตรฐานล่าสุดเสมอคุณสามารถตรวจสอบให้แน่ใจว่าDisplay intranet sites in Compatiblyปิดอยู่ อย่างไรก็ตามคุณต้องทำสิ่งนี้ในเครื่องแต่ละเครื่องไปยังเว็บเซิร์ฟเวอร์ (คำแนะนำอยู่ด้านล่าง)

หรือที่ดีกว่านั้นคือคุณสามารถใช้X-UA-Compatibleส่วนหัวเพื่อปิดสิ่งนี้จากเซิร์ฟเวอร์ โปรดทราบว่าการใช้เมตาแท็กจะไม่ได้ผล!

<!-- Doesn't always work! -->
<meta http-equiv="X-UA-Compatible" content="IE=edge" />

ตลอด MSDN มีการกล่าวถึงว่าการใช้ส่วนหัวของโฮสต์หรือเมตาแท็กควรแทนที่แม้แต่ไซต์อินทราเน็ต บทความทำความเข้าใจเกี่ยวกับโหมดความเข้ากันได้ใน internet explorer 8กล่าวต่อไปนี้

เว็บไซต์ธุรกิจภายในจำนวนมากได้รับการปรับให้เหมาะสมสำหรับ Internet Explorer 7 ดังนั้นข้อยกเว้นเริ่มต้นนี้จะรักษาความเข้ากันได้นั้นไว้ ... อีกครั้งหากใช้เมตาแท็กหรือส่วนหัว http เพื่อตั้งค่าโหมดความเข้ากันได้กับเอกสารมันจะแทนที่การตั้งค่าเหล่านี้

อย่างไรก็ตามในทางปฏิบัติจะไม่ได้ผลการใช้ส่วนหัวของโฮสต์เป็นทางเลือกเดียวที่ใช้ได้ผล ส่วนความคิดเห็นของบทความยังแสดงตัวอย่างมากมายของปัญหานี้

การใช้เมตาแท็กยังมีปัญหาอื่น ๆ อีกมากมายเช่นการละเว้นแท็กหากไม่ได้อยู่ใต้<head>แท็กโดยตรงหรือมีข้อมูลอยู่ก่อนหน้านั้นมากเกินไป (4k) นอกจากนี้ยังอาจทำให้เอกสารถูกแยกวิเคราะห์ใน IE บางเวอร์ชันซึ่งจะทำให้การแสดงผลช้าลง คุณสามารถอ่านเพิ่มเติมเกี่ยวกับปัญหาเหล่านี้ในบทความ MSDN ปฏิบัติที่ดีที่สุด: รับหัวของคุณในการสั่งซื้อ

การเพิ่มส่วนหัวที่เข้ากันได้กับ X-UA

หากคุณใช้. NET และ IIS คุณสามารถเพิ่มสิ่งนี้ลงในไฟล์web.configได้คุณยังสามารถทำได้โดยใช้โปรแกรม:

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

หากคุณไม่ได้ใช้ IIS ก็ทำได้ง่ายในทุกภาษา ตัวอย่างเช่นนี่คือวิธีการใน PHP:

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

ตราบใดที่X-UA-Compatibleส่วนหัวนั้นแสดงอยู่ในประเภทเอกสาร HTML5 ไซต์จะทำงานในโหมดมาตรฐานล่าสุดเสมอ

การปิดมุมมองที่เข้ากันได้การปิดมุมมองที่เข้ากันได้
อาจมีประโยชน์ โดยไม่ต้องเลือกDisplay all intranet sites in compatibility viewในการตั้งค่ามุมมองความเข้ากันได้

การตั้งค่ามุมมองที่เข้ากันได้

คุณสามารถนำสิ่งนี้ขึ้นมาได้โดยการกดปุ่มAltเพื่อรับเมนู

ใส่คำอธิบายภาพที่นี่

แก้ไข คำตอบนี้เกี่ยวข้องกับ IE9 ด้วย


ขออภัยในความไม่รู้ แต่จะไปที่แผ่นการตั้งค่านี้ได้อย่างไร ฉันตรวจสอบการตั้งค่า Internet Explorer คลิกขวาที่มุมมองความเข้ากันได้ในแถบที่อยู่ - ไม่มีอะไรเลย
ยิง

2
@Nick ใช้altเพื่อเปิดแถบเครื่องมืออยู่ภายใต้เครื่องมือ -> การตั้งค่ามุมมองที่เข้ากันได้
Daniel Little

โอ้ขอบคุณดูเหมือนว่าจะแก้ไขได้ ทำให้ใครสงสัยว่าทำไมพวกเขาถึงทำอย่างนั้น
ยิง

25
+1000;) ดังนั้นควรบังคับให้ OP ทุกคนเห็นคำตอบนี้เมื่อพวกเขามีแท็ก [IE] และคำว่า "เข้ากันได้" ในคำถามก่อนที่พวกเขาจะโพสต์คำถามนั้นจริงๆ
Teemu

2
ฉันลองเพิ่มส่วนหัวที่กำหนดเองใน web.config ของโปรเจ็กต์ ดูเหมือนว่าการตั้งค่าจะไม่แทนที่การตั้งค่า IE สำหรับการใช้มุมมองความเข้ากันได้สำหรับไซต์อินทราเน็ต
DomenicDatti

25

อันนี้ใช้ได้เลย ..

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

11
NB ตามที่ Lavinski กล่าวไว้ข้างต้น "เมตาแท็กไม่ได้ทำอะไรกับไซต์อินทราเน็ต"
Nathan

2
สำหรับสิ่งที่คุ้มค่าสำหรับเว็บไซต์ที่โฮสต์ (ไซต์ที่ไม่ใช่อินทราเน็ต) ที่มีX-UA-Compatibleเมตาแท็ก แต่ยังไม่เรียกใช้โหมดเอกสารมาตรฐาน IE10 เป็นค่าเริ่มต้นของหน้าฉันพบว่าหากเมตาแท็กอยู่ด้านล่างแท็กสคริปต์หรือเป็นเพียง อยู่ไกลจากด้านบนสุดของ<head>โครงสร้าง DOM IE10 จะร้องและตั้งค่าโหมดเอกสารเป็นมาตรฐาน IE8 ดังนั้นให้IE=edgeเมตาแท็กของคุณปิด<title>แท็ก ไม่ใช่วิธีแก้ไขง่ายๆสำหรับไซต์ Wordpress เสมอไปเมื่อไม่ได้เข้ารหัสไว้ในไฟล์เทมเพลตส่วนหัว ไม่แน่ใจว่า IE11 สนใจว่าเมตาแท็กอยู่ที่ใด แต่หวังว่านี่จะเป็นประโยชน์กับใครบางคน
purefusion

1
สำหรับ blind copy และ pasters เช่นตัวเองนั่นคือไม่มีแท็กปิด . <meta http-equiv = "X-UA-Compatible" content = "IE = edge"> </meta>
John Newman

คุณจะต้องปิดเมตาแท็กหากคุณใช้ XHTML
Doctype

2
นอกจากนี้แท็กนี้จะต้องเป็นแท็กแรกใน <head>
Chris Gunawardena

10

ลองเพิ่มแท็กต่อไปนี้ที่ส่วนหัว

<meta http-equiv="X-UA-Compatible" content="IE=11,IE=10,IE=9,IE=8" />

5
นั่นควรจะเป็นIE=Edgeแทน
Daniel Little

1
แต่มีความเสี่ยงที่ IE เวอร์ชันอนาคตจะทำสิ่งที่ไม่ดีและทำให้ไซต์ของคุณ
เสียหาย

7
ไม่นั่นไม่ใช่ความเสี่ยงหากคุณทำตามข้อกำหนดคุณจะไม่เห็นคนทำเช่นนั้นสำหรับ Chrome
Daniel Little

1
แท็กนี้ต้องเป็นแท็กแรกใน <head>
Chris Gunawardena

1
การแก้ไขคำตอบนี้แสดงให้เห็นว่าเหตุใดจึงไม่ใช่ความคิดที่ดี คำตอบที่ได้รับการยอมรับคือทางออกที่ดีที่สุด
David Granado

2

เมตาแท็กไม่ได้ทำอะไรกับไซต์อินทราเน็ตและปัญหาของฉันคือการแสดงผล IE10 ในโหมดความเข้ากันได้ของ IE10 สิ่งที่แก้ไขปัญหาสำหรับฉันคือการรับคำตอบของ @ Jeowเพิ่มเติมและใช้ค่านั้นในส่วนหัว http โดยการเพิ่มสิ่งต่อไปนี้ในweb.configIIS:

<system.webServer>
  <httpProtocol> 
    <customHeaders> 
      <clear />
      <!-- <add name="X-UA-Compatible" value="IE=edge" /> not good enough -->
      <add name="X-UA-Compatible" value="IE=11,IE=10,IE=9,IE=8" /> 
    </customHeaders> 
  </httpProtocol>
</system.webServer>

สำหรับวัตถุประสงค์ของ IE ไซต์อินทราเน็ตจะรวมไซต์ที่เปิดเผยต่อสาธารณะซึ่งไม่ได้ถูกกำหนดเส้นทางไปยังภายนอกเช่นพนักงาน Stackoverflow ที่ทำงานจากสำนักงานอาจเห็น stackoverflow.com ในโหมดความเข้ากันได้


1

มันทำงานได้อย่างสมบูรณ์แบบสำหรับฉันเมื่อฉันทำสิ่งต่อไปนี้:

บนhttp://msdn.microsoft.com/en-us/library/gg699338(v=vs.85).aspx

ใช้ตัวอย่างที่แน่นอนที่ระบุไว้ในช่องแรก (เพิ่มส่วนที่ขาดหายไป</html>ที่ด้านล่าง) เปิดใน IE10 และมาตรฐานถูกบังคับฉันคิดว่าคุณอาจต้องการเนื้อหาจริงใน html เพื่อบังคับให้มาตรฐานไม่แน่ใจ

คำแนะนำของฉันคือการแทนที่โค้ดว่างของคุณด้วยเนื้อหาจริง (สิ่งง่ายๆ) และดูว่ามันทำอะไรได้บ้าง

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