แทนที่โหมดความเข้ากันได้ของอินทราเน็ต IE8


200

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


1
ลองstackoverflow.com/questions/2742853/…ซึ่งใช้ได้กับฉัน
David Kolar

2
เพิ่มสิ่งนี้ไว้ในแท็กส่วนหัวของหน้าเว็บของคุณ: <meta http-equiv = "X-UA-Compatible" content = "IE = 8" /> (กำหนดเป้าหมายเวอร์ชัน IE ที่คุณต้องการ) หมายเหตุสิ่งนี้จะไม่เปลี่ยนความจริงที่เบราว์เซอร์แจ้งว่าอยู่ในโหมดความเข้ากันได้ (เรียกว่าโหมดเบราว์เซอร์) แต่หน้าจะแสดงผลในโหมดมาตรฐาน IE8 จากนั้นคุณจะต้องแก้ไขจาวาสคริปต์เพื่อตรวจสอบ "ตรีศูล" หากคุณกำลังตรวจสอบ IE8 หรือใหม่กว่า โปรดดู: blogs.msdn.com/b/mikeormond/archive/2008/09/25/…
n00b

@ n00b - สิ่งนี้ไม่มีผลกับเว็บไซต์ของฉัน
Pete

ความเข้าใจของฉันคือเมตาแท็กจะต้องฉันทันทีหลังจากแท็กหัว ฉันสังเกตเห็นว่าสคริปต์บางตัวจะถูกแทรกลงในส่วนหัวที่ดัชนี 0; ดังนั้นเมตาแท็กจะไม่อยู่ต่อจากหัวหน้าอีกต่อไป
AMissico

คำตอบ:


224

เป็นไปได้ที่จะแทนที่โหมดความเข้ากันได้ในอินทราเน็ต

สำหรับ IIS เพียงเพิ่มโค้ดด้านล่างลงใน web.config ทำงานให้ฉันด้วย IE9

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

เทียบเท่ากับ Apache:

Header set X-UA-Compatible: IE=Edge

และสำหรับ nginx:

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

และสำหรับ express.js:

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

20
นี่คือคำตอบที่ถูกต้อง เมตาแท็กไม่ได้ทำอะไรเลย แต่การเพิ่มส่วนหัวการตอบกลับใช้งานได้ ข้อมูลเพิ่มเติมที่นี่: social.msdn.microsoft.com/Forums/is/iewebdevelopment/thread/…
russau

3
ตกลง. นี่ควรเป็นคำตอบที่ถูกต้องเนื่องจากมันถูกต้องแทนที่การตั้งค่าอินทราเน็ตสำหรับเว็บไซต์นี้เท่านั้น
enriquein

9
(เพื่อชี้แจง: ใช้งานได้กับโหมดเอกสาร แต่ไม่ใช่โหมดเบราว์เซอร์)
codeulike

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

4
นี่ไม่ใช่คำตอบที่ถูกต้องเนื่องจากเป็น. net เฉพาะ (โดยไม่ต้องยอมรับความจริง)
Daddy32

84

Michael Irigoyen ถูกต้อง แต่มันซับซ้อนกว่าเล็กน้อย ...

หากคุณกำลังใช้งานหม้อไอน้ำที่ยอดเยี่ยมโดย Paul Irish คุณจะมีสิ่งต่อไปนี้: -

<!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">

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

ดังนั้นรหัสต่อไปนี้จะใช้งานได้:

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

โดยทั่วไปหากคุณทริกเกอร์การแสดงความคิดเห็นตามเงื่อนไข IE ก่อนที่จะ<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">แถลงการณ์คุณจะถูกบังคับให้เข้าสู่โหมดความเข้ากันได้ในสภาพแวดล้อมอินทราเน็ตหากคุณใช้ IE9 ด้วยการตั้งค่าเริ่มต้น

อัปเดต - ข้อมูลเพิ่มเติม: แต่โปรดทราบว่ามีเคล็ดลับที่จะทำให้การต้ม HTML5 ทำงาน:

เพิ่มความคิดเห็นแบบมีเงื่อนไข emtpy ต่อหน้า DOCTYPE และทราบเป็นอย่างดีว่าเมื่อคุณทำว่าแล้วคุณสามารถยังเพิ่มเงื่อนไขความเห็นรอบ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>) จะตามที่อธิบายไว้เช่นโดยคำตอบของคำถามอื่นนี้ให้เปิดใช้งานปัญหาที่ทราบดีว่า - สำหรับรุ่น IE ดั้งเดิมโดยไม่รองรับX-UA-Compatioble(อ่าน: สำหรับ IE7 และ IE6) - นำเบราว์เซอร์เข้ามา นิสัยใจคอโหมด


นี่ไม่ได้แก้ปัญหาสำหรับฉัน อย่างไรก็ตาม FYI การเพิ่ม "X-UA- เข้ากันได้" เป็นส่วนหัว DID แก้ไขปัญหา!
Scott Rippey

34

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


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

1
นอกจากนี้สิ่งนี้ไม่อนุญาตให้ใช้งานร่วมกับแอปพลิเคชันเก่าได้ หากคุณยกเลิกการเลือกการตั้งค่าแอปเก่าของคุณอาจไม่สามารถอัปเดตได้ ฉันคิดว่าผู้ถามกำลังมองหาวิธีบังคับใช้โหมดมาตรฐานเมื่อแอปอื่น ๆ บนอินทราเน็ตของพวกเขาต้องการช่องทำเครื่องหมายเพื่อตรวจสอบโหมดการทำงานร่วมกัน
Andrew Lewis

2
ฉันเชื่อว่าเขาตอบจากมุมมองของโปรแกรมเมอร์ "... IE จะใช้โหมดพื้นฐานบน DOCTYPE" โปรดดู: msdn.microsoft.com/en-us/library/ms535242%28VS.85%29.aspx หาก บริษัท ใช้ Active Directory การเปลี่ยนแปลงการตั้งค่าเบราว์เซอร์สามารถทำได้โดยผู้ดูแลระบบ คุณทำเช่นนั้นกับ FireFox ไม่ได้!
Nate Zaugg

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

2
@PilotBob หากคุณมีผู้ใช้ 120K + และอีกหลายร้อย (ถ้าไม่มีนับพัน) ไซต์อินทราเน็ตที่ให้การสนับสนุนนี่ไม่ใช่ทางออกที่ทำงานได้
yorch

19

มีความสับสนจำนวนหนึ่งในคำตอบของคำถามนี้

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

ฉันคิดว่ารายการบล็อกนี้ให้ภาพรวมที่ดีเกี่ยวกับวิธีการใช้ข้อมูลเมตาที่เข้ากันได้และจากประสบการณ์ของฉันทำงานตามที่อธิบายไว้: http://blogs.msdn.com/b/cjacks/archive/2012/02/29/using-x- UA-เข้ากันได้เพื่อสร้างคงทนองค์กรเว็บ applications.aspx

ประเด็นหลัก:

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

จุดสำคัญอย่างหนึ่ง (และฉันคิดว่าความสับสนมากมายมาจากจุดนี้) คือ IE มี "คลาส" สองโหมด:

  1. โหมดเอกสาร
  2. โหมดเบราว์เซอร์

โหมดเอกสารจะกำหนดเอ็นจิ้นการเรนเดอร์ (แสดงหน้าเว็บอย่างไร)

โหมดเบราว์เซอร์จะกำหนดว่าสตริงของ User-Agent (UA) ที่ IE ส่งไปยังเซิร์ฟเวอร์คืออะไรโหมดเอกสาร IE เป็นค่าเริ่มต้นและวิธีที่ IE ประเมินความคิดเห็นตามเงื่อนไข

ข้อมูลเพิ่มเติมเกี่ยวกับโหมดเอกสารและโหมดเบราว์เซอร์สามารถพบได้ในบทความนี้: http://blogs.msdn.com/b/ie/archive/2010/06/16/ie-s-compatibility-features-for- เว็บไซต์ developers.aspx? เปลี่ยนเส้นทาง = true

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

ดังนั้นฉันขอแนะนำให้ใช้เมตาแท็ก (ในหน้า html) โดยใช้ไวยากรณ์นี้:

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

ประกาศ: ให้รายการโหมดเบราว์เซอร์ที่คุณทดสอบ

โพสต์บล็อกยังให้คำแนะนำต่อการใช้ EmulateIEX นี่คือคำพูด:

อย่างที่บอกไปแล้วสิ่งหนึ่งที่ฉันแปลก ๆ คือเมื่อแอปพลิเคชันร้องขอ EmulateIE7 หรือ EmulateIE8 โหมดจำลองเหล่านี้เป็นการตัดสินใจด้วยตนเอง ดังนั้นแทนที่จะเจาะจงเจาะจงเกี่ยวกับสิ่งที่คุณต้องการคุณกำลังขอหนึ่งในสองสิ่งแล้วกำหนดว่าของสองสิ่งนั้นโดยดูที่อื่นในรหัสสำหรับ DOCTYPE (และพยายามทำความเข้าใจว่า DOCTYPE จะให้มาตรฐานคุณหรือไม่ หรือนิสัยใจคอที่ขึ้นอยู่กับเนื้อหา - บางครั้งก็เป็นงานที่สับสน) แทนที่จะทำอย่างนั้นฉันคิดว่ามันสมเหตุสมผลมากกว่าที่จะระบุสิ่งที่คุณต้องการโดยตรงแทนที่จะให้คำตอบที่เป็นคำถาม หากคุณต้องการมาตรฐาน IE7 ให้ใช้ IE = 7 มากกว่า IE = EmulateIE7 (โปรดทราบว่านี่ไม่ได้หมายความว่าคุณไม่ควรใช้ DOCTYPE - คุณควรทำ)


วิธีการเปลี่ยนโหมดเบราว์เซอร์?
Vishnudev K

ประโยคโหมดเบราว์เซอร์สับสน
Justice Fist

@JusticeFist ใช่คุณพูดถูกต้องขอบคุณ ฉันพยายามปรับปรุงมัน
stefan.s

1
@VishnudevK วิธีเดียวที่ฉันรู้คือการใช้เครื่องมือสำหรับนักพัฒนา แต่คุณอาจต้องการโซลูชันแบบเป็นโปรแกรม
stefan.s

9

ลองเมตาแท็กนี้:

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

ควรบังคับให้ IE8 แสดงผลเป็นโหมดมาตรฐาน IE8 แม้ว่าจะมีการทำเครื่องหมาย "แสดงเว็บไซต์อินทราเน็ตในมุมมองที่เข้ากันได้" [สำหรับอินทราเน็ตหรือเว็บไซต์ทั้งหมด] ฉันลองด้วยตัวเองบน IE 8.0.6


15
ไม่มันไม่ใช่
Dennis C

11
สิ่งนี้ถูกต้องจริง แต่จะต้องปรากฏก่อนหน้าแท็ก META ใด ๆ และทั้งหมดในหน้ามิฉะนั้นจะไม่ทำงาน
Michael Irigoyen

2
สิ่งนี้ไม่ได้ผลสำหรับฉัน เท่าที่ฉันสามารถบอก IE8s "แสดงอินทราเน็ตไซต์ในโหมดความเข้ากันได้" ไม่สามารถแทนที่ได้
codeulike

6
(เพื่อชี้แจง: ใช้งานได้กับโหมดเอกสาร แต่ไม่ใช่โหมดเบราว์เซอร์ดังนั้นการแสดงผลจะได้รับการแก้ไข แต่เบราว์เซอร์ยังคงแสร้งทำเป็น IE7)
codeulike

7

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

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


1
โซลูชันนี้ทำงานได้อย่างสมบูรณ์แบบหากเว็บไซต์ทั้งหมดบนอินทราเน็ตสามารถใช้มาตรฐานเว็บล่าสุดได้ อย่างไรก็ตามหากบางคนไม่สามารถทำได้วิธีนี้จะทำลายสิ่งเหล่านั้นโดยไม่ได้ตั้งใจ ... ฉันจะเข้าหาด้วยความระมัดระวัง
ᴍᴀᴛᴛʙᴀᴋᴇʀ

4

ฉันพบคำตอบที่ใช้งานได้ซึ่งอนุญาตให้แทนที่มุมมองความเข้ากันได้ของอินทราเน็ตที่เลือก เพียงเพิ่มเหตุการณ์ OnInit ของหน้าเว็บของคุณในบรรทัดนี้ (ไม่ต้องใช้ meta หรือ web.config customHeader ที่ต้องการ):

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

1
คำตอบเฉพาะการพัฒนาแพลตฟอร์ม ... โดยไม่ต้องระบุแพลตฟอร์ม ฉันเดาว่าคุณกำลังพูดถึง Visual Studio .NET อยู่หรือเปล่า เท่าที่ฉันสามารถบอกได้ว่า 'เหตุการณ์ OnInit' ไม่มีอยู่ (ใน Javascript, Java, PHP, .... )
Stijn de Witt


3

ฉันสามารถแทนที่โหมดความเข้ากันได้โดยระบุเมตาแท็กเป็นแท็กแรกในส่วนหัวไม่ใช่เฉพาะเมตาแท็กแรก แต่เป็นและเป็นแท็กแรกเท่านั้น

ขอบคุณ @ stefan.s ที่ให้ฉันตอบคำถามยอดเยี่ยมของคุณ ก่อนที่จะอ่านว่าฉันมี:

สิ่งนี้ไม่ทำงาน

<head> 
<link rel="stylesheet" type="text/css" href="https://stackoverflow.com/qmuat/plugins/editors/jckeditor/typography/typography.php"/>
<meta http-equiv="x-ua-compatible" content="IE=9" >

ย้ายแท็กลิงก์ออกไปและใช้งานได้

งานนี้ :

<head><meta http-equiv="x-ua-compatible" content="IE=9" >

ดังนั้นไคลเอนต์ IE8 ที่ตั้งค่าให้ใช้ความเข้ากันได้จะแสดงผลหน้าเป็นโหมดมาตรฐาน IE8 - content = 'IE = 9' หมายถึงใช้มาตรฐานสูงสุดที่มีให้จนถึงและรวมถึง IE9


2

นี่ไม่ใช่ทางออก แต่ฉันรู้สึกว่ามันดีที่สุด ในเว็บไซต์อินทราเน็ตของเราเราบอกผู้คนว่า Firefox สามารถเข้าถึงได้เท่านั้นเราไม่ได้รับความกรุณาจากผู้ใช้ IE ในบริเวณนี้ ตรวจสอบตัวแทนผู้ใช้บนเซิร์ฟเวอร์หรือฝั่งไคลเอ็นต์และปฏิเสธการเข้าถึงจาก IE และฉันเป็น. NET โปรแกรมเมอร์


1
ฉันชอบความคิดของคุณ แต่เราไม่มี firefox ที่นี่
Dennis C

22
แย่ที่สุด ข้อเสนอแนะ เคย. ไม่ดีเท่าเว็บไซต์อินทราเน็ตทั้งหมดที่เป็น IE เท่านั้น ลองทำงานเพิ่มอีกเล็กน้อยและทำให้ทุกอย่างทำงานได้บนเบราว์เซอร์ทั่วไปทั้งหมด มันไม่ยากเลย
mhenry1384

2
@ mhenry1384 สนใจที่จะอธิบายว่าทำไมข้อเสนอแนะที่แย่มากที่มีระบบอินทราเน็ตที่ถูกล็อค? คุณไม่จำเป็นต้องสนับสนุนควาร์กสำหรับเบราว์เซอร์รุ่นเก่า คุณรู้ว่าผู้ใช้ของคุณจะได้รับประสบการณ์ที่ตั้งใจ ไม่ใช่ระบบสาธารณะที่สนใจคุณยังคงรองรับ IE 5.5 อยู่หรือไม่? ฉันบอกให้ผู้ใช้สาธารณะของฉันอัปเดต ฉันไม่ควรเสียเวลากับระบบแบ็กเอนด์ แต่อย่างใดมันเป็นสาธารณะที่ต้องการฉัน มันไม่เหมือนที่ฉันล็อคมันลงไปที่ IE 6 และต้องการ ActiveX เหมือนบางอย่าง เช่นระบบของฉันอนุญาต Firefox 6 ขึ้นไป ดังนั้นถ้า Firefox 27 ออกมาก็ยังใช้งานได้ ไม่ลงคะแนนให้ฉันหรือโต้แย้งอย่างแท้จริง
Caimen

2
ทุกไซต์อินทราเน็ตที่ฉันใช้ซึ่งถูกล็อคไว้ที่เบราว์เซอร์ที่ระบุจะถูกล็อคลงไปที่ IE มันทำให้ฉันบ้าคลั่งเพราะฉันเกลียด IE มากเท่ากับผู้ชายคนต่อไป บังคับให้ผู้ใช้ของคุณใช้เบราว์เซอร์ที่คุณเลือก (ไม่ใช่ของพวกเขา) แม้ว่าจะเป็นอะไรก็ตาม แต่ดูเหมือนว่าขัดกับเว็บหรือแม้แต่เว็บอินทราเน็ต ไม่ใช่เรื่องยากที่จะทำให้เว็บไซต์ทำงานใน IE7 / 8/9 โดยเฉพาะถ้าคุณใช้ไลบรารี่อย่าง jQuery ปล่อยให้ผู้ใช้ใช้สิ่งที่พวกเขาต้องการ
mhenry1384

2
ยกตัวอย่างเช่นไซต์ที่เขียนขึ้นสำหรับ Firefox 10 จะเป็นประสบการณ์ของฉันที่จะทำงานได้อย่างสมบูรณ์บน IE9 โดยไม่ต้องดัดแปลง ดังนั้นการ จำกัด ผู้ใช้จากการใช้ IE9 หมายความว่ามีสิ่งอื่นเกิดขึ้น มันบ่งบอกว่าคุณอยู่ในภารกิจอุดมการณ์ไม่ใช่คนที่พยายามเขียนซอฟต์แวร์เว็บที่ดี หากเป็นเพียงคำถามที่ไม่มีเวลาทดสอบเบราว์เซอร์อื่นที่ไม่ใช่ Firefox คุณ จำกัด ผู้ใช้ไม่ให้ใช้ Opera หรือไม่ [ขออภัยที่พูดมากเกินไป ฉันควรกลับไปแก้ไขปัญหา IE8 นี้ฉันมี ... :-)]
mhenry1384

1

ฉันต่อสู้กับปัญหานี้แล้วและต้องการช่วยเสนอวิธีแก้ไขปัญหาและข้อมูลเชิงลึกที่ไม่ซ้ำใคร

เฟรมเวิร์กที่ใช้ AJAX บางตัวจะฉีดจาวาสคริปต์และสไตล์ชีทไว้ที่จุดเริ่มต้น<head>และทำสิ่งนี้ดูเหมือนว่าจะป้องกันเมตาแท็กที่มีชื่อเสียงที่ใช้งานได้ดี ในกรณีนี้ฉันพบว่าการแทรกลงในส่วนหัวการตอบกลับ HTTP โดยตรงเช่นเดียวกับคำตอบของ Andras Csehi จะแก้ปัญหาได้

อย่างไรก็ตามสำหรับพวกเราที่ใช้ Java Servlets วิธีที่ดีในการแก้ไขปัญหานี้คือการใช้ 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 {
}

}

1

เราสามารถแก้ไขปัญหานี้ได้ในสภาพแวดล้อม Spring-Apache-tomcat โดยเพิ่มหนึ่งบรรทัดเดียวในเมธอด 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)


0

หากคุณต้องการให้เว็บไซต์ของคุณบังคับใช้โหมดมาตรฐาน IE 8 ให้ใช้เมตาแท็กนี้พร้อมกับ DOCTYPE ที่ถูกต้อง:

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

สังเกตค่า "EmulateIE8" แทน "IE8" แบบธรรมดา

ตาม IE devs สิ่งนี้ควร "แสดง DOCTYPE มาตรฐานในโหมดมาตรฐาน IE8; แสดง Quirks DOCTYPEs ในโหมด Quirks ใช้แท็กนี้เพื่อแทนที่มุมมองที่เข้ากันได้กับเครื่องไคลเอนต์และบังคับมาตรฐานให้เป็นมาตรฐาน IE8"

ข้อมูลเพิ่มเติมเกี่ยวกับโพสต์บล็อก IE นี้: http://blogs.msdn.com/b/ie/archive/2008/08/27/introducing-compatibility-view.aspx


0

คำถามนี้เป็นคำถามซ้ำกับกองทัพ "Internet Explorer 8 โหมด" เบราว์เซอร์ในอินทราเน็ต

ตอบมีแสดงให้เห็นว่ามันเป็นไปไม่ได้ที่จะปิดการใช้มุมมองการทำงานร่วมกัน (ในฝั่งเซิร์ฟเวอร์) - https://stackoverflow.com/a/4130343/24267 ดูเหมือนจะเป็นอย่างนั้นเพราะไม่มีคำแนะนำใด ๆ ที่ฉันได้ลองทำ ใน IE8 "โหมดเบราว์เซอร์" ได้รับการตั้งค่าเป็นมุมมองที่เข้ากันได้ของ Internet Explorer 8 ไม่ว่าจะเป็นส่วนหัว X-UA-Compatible ที่คุณส่ง

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

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 ("ตรีศูล") ! = -1) {
    // โกหกนี่คือ IE8 ในโหมดที่เข้ากันได้
    isIE8 = จริง;
}


0

เพิ่มสิ่งนี้ในแท็กส่วนหัวของหน้าเว็บของคุณ (กำหนดเป้าหมายเวอร์ชัน IE ที่คุณต้องการ):

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

หมายเหตุสิ่งนี้จะไม่เปลี่ยนความจริงที่เบราว์เซอร์แจ้งว่าอยู่ในโหมดความเข้ากันได้ (เรียกว่าโหมดเบราว์เซอร์) แต่หน้าจะแสดงผลในโหมดมาตรฐาน IE8 หากยังไม่แสดงผลตามที่คุณต้องการอาจเป็นเพราะคุณมีจาวาสคริปต์ที่ตรวจสอบเวอร์ชัน IE อย่างผิดพลาด ดูโพสต์บล็อกต่อไปนี้เพื่อตรวจสอบคุณสมบัติที่คุณควรจะออกจาก keying เพราะแม้ว่าคุณจะตั้งเมตาแท็ก X-UA-รองรับสตริงตัวแทนผู้ใช้จะยังคงพูด MSIE 7.0

ในกรณีของฉันสำหรับการแก้ไขฉันต้องเพิ่มการตรวจสอบโหมดความเข้ากันได้ของ IE7 ฉันใช้รหัส javascript ง่ายๆ

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

0

สำหรับผู้อื่นที่กำลังอ่านข้อความนี้เพื่อปิดใช้งานสิ่งนี้ผ่าน GPO สำหรับผู้ใช้ทั้งหมดนี่คือการตั้งค่า:

การกำหนดค่าคอมพิวเตอร์ / แม่แบบการดูแลระบบ / ส่วนประกอบ Windows / Internet Explorer / มุมมองที่เข้ากันได้ / เปิดโหมดมาตรฐาน Internet Explorer สำหรับ Local Intranet

แม้ว่า web.config จะแก้ไขให้ฉันด้วย


หากต้องการไปที่Local Group Policy Editorคุณสามารถเรียกใช้gpedit.mscจาก Run ได้
ROMANIA_engineer


0

ความคิดเห็นของ Stefan S เกี่ยวกับโหมดเอกสารเมื่อเทียบกับโหมดเบราว์เซอร์นั้นเกี่ยวข้องกับปัญหาของฉันมาก

ผมมีข้อมูล meta X-UA-เนื้อหาในหน้า navigator.appVersionแต่ผมฝั่งไคลเอ็นต์ทดสอบรุ่นเบราว์เซอร์ผ่านทาง การทดสอบนี้ไม่ได้สะท้อนข้อมูลเมตาเพราะมันให้โหมดเบราว์เซอร์ไม่ใช่โหมดเอกสาร

คำตอบสำหรับฉันคือการทดสอบdocument.documentModeสิ่งที่ชอบ:

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

ตอนนี้เมตาแท็ก X-UA-Content ของฉันสะท้อนในการทดสอบเบราว์เซอร์ของฉัน

ทำไมฉันถึงทำสิ่งที่ขมวดคิ้วอย่างเช่นทดสอบเบราว์เซอร์ ความเร็ว. jQuery Add-in ต่างๆของฉันเช่น tablesorter นั้นช้าเกินไปใน IE6 / 7 และฉันต้องการที่จะปิดมัน ฉันไม่แน่ใจว่าการทดสอบคุณลักษณะของเบราว์เซอร์สามารถช่วยฉันแก้ปัญหานี้เป็นอย่างอื่นได้หรือไม่

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