ก่อนอ่าน:
ก่อนที่จะอ่านเนื้อหาเฉพาะของบทความ ฉันหวังว่าคุณจะสามารถเปิด IE8 ก่อน เปิด http://www.taobao.com จากนั้นป้อนในแถบที่อยู่:
javascript:alert(document.documentMode +navigator.userAgent);void(0)
ฉันไม่รู้ว่าคุณจะประหลาดใจหรือไม่หลังจากเห็นผลลัพธ์ อย่างไรก็ตาม ฉันพบว่ามันแปลกมาก เนื่องจากไม่มีแท็กความเข้ากันได้ในเมตาของหน้า และไม่มีแท็กที่เข้ากันได้กับ X-UA ในส่วนหัว http เมื่อนักเล่นซอตรวจสอบ มัน ทำไมเว็บไซต์ถึงทำงานในโหมด IE7 ?
โหมดความเข้ากันได้ของ IE7 และมุมมองความเข้ากันได้
เมื่อวาน ตอนที่ฉันอ่านบทความเกี่ยวกับ iframe ที่ปรับเปลี่ยนได้สูง ใน Word of Mouth ฉันพบว่าการสาธิตที่ให้มานั้นแตกต่างจากการสาธิตของฉันใน IE8 เห็นได้ชัดว่าผลลัพธ์ทางออนไลน์เหมือนกับใน IETester7 ไม่มีเครื่องหมายความเข้ากันได้ในเมตา fiddler ตรวจสอบว่าไม่มีเครื่องหมาย X-UA-Compatible ในส่วนหัว http แต่เหตุใดผลลัพธ์ออนไลน์จึงแตกต่างจากผลลัพธ์ในเครื่อง นี่ทำให้ฉันหดหู่ใจ หลังจากดูอีกครั้ง ฉันพบว่าการสาธิตออนไลน์ไม่แสดงปุ่ม "มุมมองความเข้ากันได้" ใน IE8 ลองคิดดูสิ นี่คงเป็นเหตุผล
ต่อมาฉันพบบทความ Just The Facts: Recap of Compatible View แม้ว่าจะไม่ได้แก้ปัญหา แต่เนื้อหาก็ดี ฉันอยากจะแบ่งปันและอ้างอิงข้อความหนึ่ง:
มุมมองที่เข้ากันได้และแท็กที่เข้ากันได้กับ X-UA นั้นไม่เท่ากัน
มุมมองที่เข้ากันได้คือสิ่งที่คุณทำบนไคลเอนต์ โดยจะมีผลกับสามสิ่ง: สตริงตัวแทนผู้ใช้, เวกเตอร์เวอร์ชัน (ใช้ในการประเมินความคิดเห็นแบบมีเงื่อนไข) และโหมด DOCTYPE ที่ทริกเกอร์แมปมาตรฐานเป็น – มาตรฐาน IE8 หรือมาตรฐาน X -UA-Compatible <META> tag / header คือสิ่งที่คุณใช้ในเนื้อหาเพจ / ฝั่งเซิร์ฟเวอร์ และหากมีอยู่ จะแทนที่การตั้งค่ามุมมองที่เข้ากันได้บนไคลเอนต์โดยสมบูรณ์ โดยจะมีผลกับสองสิ่ง: Version Vector และโหมด DOCTYPE ที่ทริกเกอร์ Standards map to ไม่สามารถส่งผลกระทบต่อสตริง UA ได้เนื่องจากสายเกินไปที่จะเปลี่ยนแปลง - ลูกค้าได้ส่งคำขอ GET ไปยังเซิร์ฟเวอร์แล้ว (และมีสตริง UA) สิ่งนี้มีความหมายต่อนักพัฒนาคือหากไซต์ของคุณหมุน บนสตริง User Agent การเพิ่มเพียงแท็กที่เข้ากันได้กับ X-UA (เพื่อทำให้ IE8 แสดงไซต์ของคุณในโหมดมาตรฐาน IE7) จะไม่ทำให้เว็บไซต์ของคุณเข้ากันได้ - คุณจะต้องอัปเดตตรรกะการตรวจจับสตริง User Agent ของคุณด้วย ดี.
ซึ่งหมายความว่ามุมมองที่เข้ากันได้มีบทบาทสามประการ:
เมตาแท็กมีบทบาทเพียงสองบทบาทเท่านั้น: 1. เวอร์ชัน 2. ประเภทเอกสาร
(กล่าวในที่นี้ว่าเมตาแท็กไม่มีผลกับ UserAgent ควรอ้างอิงถึง ua บนฝั่งเซิร์ฟเวอร์ เนื่องจากคำขอของไคลเอ็นต์ถูกส่งไปแล้วและมี ua จึงจะไม่ได้รับผลกระทบ อย่างไรก็ตาม ua ของไคลเอ็นต์ยังคงอยู่ ได้รับผลกระทบ และ ie7 จะปรากฏขึ้น)
ถูกต้อง:
(บางทีการทดสอบก่อนหน้านี้อาจผิด) ua ของลูกค้าจะไม่ได้รับผลกระทบ แต่จะมีผลกับ document.documentMode เท่านั้น
นอกจากนี้:
แท็ก / ส่วนหัว <META> ตามลำดับหมายถึง: <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> และการเพิ่มส่วนหัว http บนฝั่งเซิร์ฟเวอร์ เช่น ในไฟล์การกำหนดค่า .net:
นอกจากนี้ คุณยังสามารถเพิ่มส่วนหัว http ให้กับ IIS หรือ Apache ได้:
การแก้ปัญหา
ณ จุดนี้ ปัญหาในตอนต้นของบทความยังคงไม่ได้รับการแก้ไข เมื่อคืนนี้ ฉันเห็นบทความของ Qin Ge เกี่ยวกับการใช้ประเภทเอกสารเพื่อเปิดใช้งานโหมดเบราว์เซอร์ โดยไม่ได้ตั้งใจ โดยระบุว่าโหมดความเข้ากันได้จะถูกเปิดใช้งานในรายการไซต์ที่ไม่อนุญาตของ Microsoft ด้วย บทความด้านบน หนึ่งในสองความคิดเห็นคือ: res://iecompat.dll/iecompatdata.xml (IE8 เท่านั้น) ป้อนที่อยู่นี้ลงใน IE8 และจะแสดง: รายการมุมมองที่เข้ากันได้ ด้วยวิธีนี้ คุณจะพบโดเมนในที่สุด ชื่อของ Koubei และ Taobao ในรายการนี้ ดังนั้นฉันคิดว่านี่ควรเป็นคำตอบสำหรับคำถามในตอนต้นของบทความนี้ คุณยังสามารถค้นหาชื่อโดเมนในรายการนี้ เปิดมัน และป้อนจาวาสคริปต์ที่ตอนต้นของ บทความในแถบที่อยู่ (ปล.: Microsoft มีรายการมากเกินไป) แปลงไซต์จำนวนมากเป็น IE7
<การกำหนดค่า>
<system.webServer>
<httpโปรโตคอล>
<ส่วนหัวแบบกำหนดเอง>
<ชัดเจน />
<เพิ่มชื่อ = "X-UA-Compatible" value = "IE = EmulateIE7" />
</ส่วนหัวแบบกำหนดเอง>
</httpโปรโตคอล>
</system.เว็บเซิร์ฟเวอร์>
</การกำหนดค่า>