เหตุใด IE9 จึงเปลี่ยนเป็นโหมดความเข้ากันได้ในเว็บไซต์ของฉัน


197

ฉันเพิ่งติดตั้ง IE9 เบต้าและในบางเว็บไซต์ที่ฉันสร้างขึ้น (HTML5) IE9 ข้ามไปยังโหมดความเข้ากันได้เว้นแต่ว่าฉันจะไม่บอกด้วยตนเอง ฉันลองลบเว็บไซต์หลายส่วนแล้ว แต่ไม่มีการเปลี่ยนแปลง การรวมเอา CSS ทั้งหมดออก ในเว็บไซต์อื่น ๆ ของฉันมันก็ใช้ได้

นอกจากนี้อย่าตั้งค่าด้วยตนเองเพราะ IE9 จะจดจำการตั้งค่าของผู้ใช้และคุณไม่สามารถเปลี่ยนกลับเป็นอัตโนมัติได้ (หรืออย่างน้อยฉันก็ไม่พบวิธีแม้แต่ผ่านการเรียกดูแบบส่วนตัวและล้างแคช)

อย่างไรก็ตาม. ไซต์ที่ข้ามไปยังโหมดความเข้ากันได้: http://alliancesatwar.com/guide/ เว็บไซต์
ที่แสดงผลถูกต้อง: http://geuze.name/basement/ (ฉันไม่สามารถโพสต์ลิงค์มากกว่า 1 รายการ)

ทั้งใช้เหมือนกันdoctypeและทั้งหมด ไซต์เหล่านั้นมีจำนวนมากที่เหมือนกัน (นอกเหนือจากลักษณะที่ปรากฏ) โดยใช้เทมเพลตพื้นฐานเดียวกัน (การเข้ารหัสเมตาแท็กประเภทของ Doctype และจาวาสคริปต์เดียวกัน)

มันจะดีถ้ามีใครตอบฉัน! เว็บไซต์ HTML5 ที่แสดงผลในโหมด IE7 นั้นค่อนข้าง ... lame


5
กรุณาอธิบาย "กระโดดเข้าสู่โหมดความเข้ากันได้"? หากคุณเห็นการรีเฟรชหน้าและบอลลูนที่ระบุว่า IE ได้รีเฟรชหน้านี้ในมุมมองที่เข้ากันได้เนื่องจากปัญหาหมายความว่าคุณพบข้อผิดพลาด IE ที่เรียกว่า "hard assert" ซึ่งคล้ายกับความผิดพลาดในเครื่องมือการแสดงผล . เราสนใจที่จะค้นหาและแก้ไขสิ่งเหล่านี้ โปรดยื่นข้อผิดพลาดที่connect.microsoft.com/ie ขอบคุณ!
EricLaw

คำตอบ:


263

ทำงานได้ใน IE9 documentMode สำหรับฉัน

หากไม่มีX-UA-Compatibleส่วนหัว / เมตาในการตั้งค่าโหมดเอกสารที่ชัดเจนคุณจะได้รับโหมดตาม:

  • ไม่ว่าผู้ใช้จะคลิกปุ่ม 'มุมมองที่เข้ากันได้' ในโดเมนนั้นมาก่อนหรือไม่
  • อาจเป็นไปได้ว่าสิ่งนี้เกิดขึ้นโดยอัตโนมัติเนื่องจากเนื้อหาอื่น ๆ ในไซต์ทำให้ตัวเรนเดอร์ของ IE8 / 9 เกิดความผิดพลาดและถอยกลับไปเป็นตัวเรนเดอร์เก่า
  • ไม่ว่าผู้ใช้จะเลือกที่จะทำให้เว็บไซต์ทั้งหมดในมุมมองที่เข้ากันได้โดยค่าเริ่มต้น;
  • ไม่ว่า IE จะคิดว่าเว็บไซต์นั้นอยู่ในอินทราเน็ตของคุณหรือไม่
  • ไม่ว่าไซต์นั้น ๆ จะอยู่ในรายการเว็บไซต์ของ Microsoft ที่ต้องการมุมมองที่เข้ากันได้หรือไม่

คุณสามารถเปลี่ยนการตั้งค่าเหล่านี้ได้จาก 'เครื่องมือ -> การตั้งค่ามุมมองที่เข้ากันได้' จากเมนู IE แน่นอนว่าเมนูนั้นถูกซ่อนไว้อย่างลับๆดังนั้นคุณจะไม่เห็นมันจนกว่าคุณจะกด Alt

ในฐานะผู้เขียนไซต์หากคุณมั่นใจว่าไซต์ของคุณเป็นไปตามมาตรฐาน (แสดงผลได้ดีในเบราว์เซอร์อื่นและใช้คุณสมบัติการดมกลิ่นเพื่อตัดสินใจว่าควรใช้เบราว์เซอร์ใด) ฉันแนะนำให้ใช้:

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

หรือส่วนหัว HTTP:

X-UA-Compatible: IE=Edge

เพื่อรับ renderer ล่าสุดไม่ว่าจะใช้เวอร์ชัน IE ใด


79
หมายเหตุสำคัญ: หาก IE 9 ได้รับการกำหนดค่าให้แสดงไซต์อินทราเน็ตในโหมดความเข้ากันได้เสมอเมตาแท็กหรือส่วนหัว HTTP จะไม่แทนที่
Jacob

29
ในฐานะที่เป็น Jacob กล่าวถึง IE สามารถตั้งค่าเริ่มต้นให้แสดงเว็บไซต์ท้องถิ่น / อินทราเน็ตทั้งหมดให้อยู่ในโหมดที่เข้ากันได้ กด alt -> การตั้งค่ามุมมองที่เข้ากันได้ของเครื่องมือและตรวจสอบให้แน่ใจว่าคุณไม่ได้ทำเครื่องหมายในช่อง
Cory Mawhorter

30
เมตาแท็กใช้งานได้เฉพาะกับฉันเมื่อฉันวางไว้ด้านหลัง <head> (ดูคำตอบด้านล่าง) เมื่อฉันวางลงในส่วน <head> องค์ประกอบมันไม่ทำงาน (ฉันยังได้รับหน้าขาด)
Boris van Schooten

13
@Jacob: มันเป็นเรื่องเข้าใจผิด ใช่คุณจะเข้ากันได้กับโหมดเบราว์เซอร์และไม่มีทางออก แต่คุณยังสามารถใช้ส่วนหัว HTTP เพื่อตั้งค่า Document Mode ซึ่ง IE เวอร์ชันที่เคยทำงานได้ดีที่สุดสำหรับเว็บไซต์ของคุณ IE = Edge ควรมอบเอ็นจิ้นการเรนเดอร์ล่าสุดให้คุณเสมอ ดังนั้นแม้ว่าคุณจะใช้เทคนิคในโหมดที่เข้ากันได้คุณสามารถให้หน้าของคุณแสดงผลเหมือนในโหมดปกติ แก้ไขให้ถูกต้องหากฉันผิด แต่อย่างน้อยเว็บไซต์อินทราเน็ตของเราก็ทำงานได้เช่นนี้ (แม้ว่าจะมีการเลือกการตั้งค่า
mkataja

7
@ BorisvanSchooten: ฉันไม่รู้ว่านี่เป็นสาเหตุหรือไม่ แต่<meta>แท็กต้องอยู่ในช่วง 512 ไบต์แรกของไฟล์ HTML ที่ประมวลผล ฉันพูดว่า "ถูกประมวลผล" เพราะคุณมี PHP ทุกชนิดอยู่ที่นั่น แต่โค้ดที่แสดงนั้นเป็นสิ่งที่สำคัญ ฉันได้รับความคิดเห็นทั้งหมดของฉันเกี่ยวกับแท็ก<meta>ด้านล่าง<meta>เพื่อที่ฉันจะได้ไม่ทำลายข้อกำหนด
doubleJ

33

ฉันใส่

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

สิ่งแรกหลังจาก

<head>

(ฉันอ่านมันที่ไหนสักแห่งฉันจำไม่ได้)

ฉันไม่อยากจะเชื่อว่ามันทำงานได้ !!


คุณต้องปิดแท็บและเปิดแท็บใหม่คุณลองหรือไม่
Zeb

1
เขากล่าวว่า "ไม่" ไม่ใช่ "ไม่ได้";)
นาธาน JB

14
+1 นี้คือโน้ตที่มีคุณค่ามาก หากคุณมี<script>อยู่ข้าง<head>ในmetaคำสั่งนี้มัน (IE = edge) จะถูกละเว้น
jakub.g

22

หากต้องการบังคับให้ IE แสดงผลในโหมดมาตรฐาน IE9 คุณควรใช้

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

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


มันใช้งานได้ในเว็บไซต์อื่น ดังนั้นไม่ควรจะเป็น นอกจากนี้เมตาแท็กนั้นเป็นสิ่งชั่วร้ายเนื่องจากคุณต้องอัปเดตด้วยตนเองทุกครั้งที่มีเวอร์ชัน IE ใหม่
René

2
ขออภัยฉันไม่สามารถแก้ไขปัญหาของคุณ อย่างไรก็ตามฉันได้แก้ไขคำตอบของฉันที่จะใช้IE=edgeแทนซึ่งจะเรียกใช้การใช้เครื่องมือล่าสุดที่มีอยู่เสมอ
Delan Azabani

สมมติฐานของคุณไม่ถูกต้อง การสาธิตระบุ X-UA-Compatible เพื่อป้องกันไม่ให้ IE แสดงปุ่มมุมมองที่เข้ากันได้เนื่องจากหากผู้ใช้ดันเนื้อหาของไซต์จะไม่ทำงานอย่างถูกต้อง
EricLaw

@ReneGeuze คุณเข้าใจผิด Edge จะอ้างถึง IE เวอร์ชันล่าสุดเสมอ
neoswf

@DelanAzabani พอร์ทัลอินทราเน็ตของฉันเปลี่ยนเป็นโหมดความเข้ากันได้แม้ฉันจะเพิ่มเมตาแท็กตามที่คุณแนะนำ กรุณาแนะนำว่ามันสามารถแก้ไขและยังคงอยู่ในตัวอย่างโหมดมาตรฐาน - IE 8, IE 8 comapitibility แล้วฉันต้องการ IE 8 เท่านั้น
dsi

6

ฉันโพสต์ความคิดเห็นนี้ในเธรด StackOverflow แยก แต่คิดว่ามันคุ้มค่าที่จะทำซ้ำที่นี่:

สำหรับแอป ASP.Net ภายในองค์กรของเราการเพิ่มแท็ก "X-UA-Compatible" บนหน้าเว็บใน web.config หรือในโค้ดข้างหลังทำให้ไม่มีความแตกต่างอย่างแน่นอน

เพียงสิ่งที่ทำงานสำหรับเราคือการด้วยตนเองปิดการตั้งค่านี้ใน IE8:

ป้อนคำอธิบายรูปภาพที่นี่

(เฮ้อ.)

ปัญหานี้ดูเหมือนจะเกิดขึ้นกับ IE8 และ IE9 บนไซต์อินทราเน็ตเท่านั้น เว็บไซต์ภายนอกจะทำงานได้ดีและใช้เวอร์ชันที่ถูกต้องของ IE8 / 9 แต่สำหรับเว็บไซต์ภายใน IE9 จะตัดสินใจทันทีว่าเป็น IE7 จริงและไม่มีการรองรับ HTML 5

ไม่ฉันไม่เข้าใจเหตุผลนี้เช่นกัน

โซลูชันที่ไม่เต็มใจของฉันคือการทดสอบว่าเบราว์เซอร์มีการสนับสนุน HTML 5 หรือไม่ (โดยการสร้างแคนวาสและการทดสอบว่าใช้ได้หรือไม่) และแสดงข้อความนี้ต่อผู้ใช้หากไม่ถูกต้อง:

ป้อนคำอธิบายรูปภาพที่นี่

มันไม่ได้เป็นมิตรกับผู้ใช้โดยเฉพาะ แต่ให้ผู้ใช้ปิดการตั้งค่าที่น่ารำคาญนี้ดูเหมือนว่าเป็นวิธีเดียวที่จะให้พวกเขาเรียกใช้แอปพลิเคชันเว็บ HTML 5 ภายในบ้านได้อย่างถูกต้อง

หรือให้ผู้ใช้งานใช้งาน Chrome ;-)


1

ไซต์ที่http://www.HTML-5.com/index.htmlมีเมตาแท็ก X-UA-Compatible แต่ยังคงอยู่ในมุมมองที่เข้ากันได้ตามที่ระบุโดยไอคอน "หน้าฉีกขาด" ในแถบที่อยู่ คุณจะได้รับตัวเลือกเมนูเพื่อบังคับให้ IE 9 (เวอร์ชันสุดท้าย 9.0.8112.16421) แสดงผลหน้าในโหมดมาตรฐานได้อย่างไร ฉันพยายามคลิกขวาที่ไอคอนหน้าฉีกขาดเช่นเดียวกับเคล็ดลับที่สำคัญ "Alt" เพื่อแสดงตัวเลือกเมนูเพิ่มเติมที่กล่าวถึงโดย Rene Geuze แต่สิ่งเหล่านั้นไม่ทำงาน


4
ลบความคิดเห็นตามเงื่อนไข IE รอบเมตา คุณกำลังแสดงหน้าเว็บapplication/xhtml+xmlเพื่อให้มีการใช้กฎการแยกวิเคราะห์ XML XML ไม่สนับสนุนความคิดเห็นตามเงื่อนไข ไม่ว่าในกรณีใดมันก็ไม่สมเหตุสมผล เบราว์เซอร์จะต้องเลือกโหมดก่อนจึงจะสามารถตัดสินใจว่าความคิดเห็นตามเงื่อนไขที่จะตีความ
bobince

1

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


0

ดูดีสำหรับฉัน:

ข้อความแสดงแทน

คุณแน่ใจหรือว่าคุณไม่ได้อยู่ในการตั้งค่าทั่วโลกหรือบางอย่าง นี่เป็นการติดตั้งเบต้าแบบสมบูรณ์บน Windows 7 เครื่องมือสำหรับนักพัฒนารายงานว่าหน้านั้นเป็นค่าเริ่มต้นไปที่โหมดมาตรฐาน IE9


ฉันมีรายงานข้อผิดพลาดนี้มากกว่า 1 รายการ แม้ว่ามันอาจจะเกี่ยวข้องกับ base dir ( alliancesatwar.com ) ซึ่งมันทำให้ render ย่อยทั้งหมดในโหมดที่เข้ากันได้เช่นกัน แต่แล้วฉันมีคำถามอะไรในรูทของเว็บไซต์ทำให้ IE แสดงเว็บไซต์ในโหมดความเข้ากันได้? ดังนั้นอย่างน้อยคู่มือนี้อาจถูกเขียนโค้ดไว้ถูกต้อง ฉันหวังว่าอย่างนั้น
René

@Rene Strange ฉันเพิ่งทำซ้ำโดยคลิกที่ลิงก์คำแนะนำจากหน้าแรก แต่สิ่งนี้เกิดขึ้นเพียงครั้งเดียวและหลังจากพยายามสองสามครั้งฉันยังไม่ได้ทำสิ่งนี้ซ้ำเพียงครั้งเดียวเท่านั้น
Yi Jiang

0

ฉันเพิ่งต้องแก้ไขปัญหานี้และนี่คือสิ่งที่ฉันทำ:

ก่อนอื่นวิธีแก้ปัญหานี้เกี่ยวกับการปรับเซิร์ฟเวอร์ Apache

หลักที่สองคิดว่ามีข้อผิดพลาดใน IE9 ซึ่งหมายความว่าเมตาแท็กจะไม่ทำงานแทนที่จะใช้วิธีนี้ลองวิธีนี้

  • ค้นหา / เปิด httpd.conf ของคุณ
  • ไม่ใส่เครื่องหมายข้อคิดเห็น / หรือเพิ่มบรรทัดต่อไปนี้

    LoadModule headers_module modules/mod_headers.so
  • เพิ่มบรรทัดต่อไปนี้

    <IfModule headers_module>
        Header set X-UA-Compatible: IE=EmulateIE8
    </IfModule>
  • บันทึก / รีสตาร์ทเซิร์ฟเวอร์ Apache ของคุณ

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