ค่า X-UA ไม่ถูกต้องสำหรับแอตทริบิวต์ http-equiv บนเมตาองค์ประกอบ


110

ฉันใช้แบบเดียวกับmetaที่ใช้ HTML5 Boilerplate และตัวตรวจสอบ HTML ของ W3C บ่นว่า:

ค่า X-UA ไม่ถูกต้องสำหรับแอตทริบิวต์ http-equiv บนเมตาองค์ประกอบ

<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>

metaแท็กนี้มีอะไรผิดพลาด


6
นี่คือบล็อกโพสต์ที่ดีเกี่ยวกับเรื่องนี้ (เป็นผลการค้นหาแรกที่ฉันได้รับ): blog.yjl.im/2011/01/…
ComFreek

คำตอบ:


67

X-UA-Compatible ไม่ใช่ "มาตรฐาน" HTML (FSVO "มาตรฐาน" ที่เกี่ยวข้องกับการปรากฏบนหน้าวิกิที่แก้ไขได้แบบสาธารณะที่อ้างอิงโดยข้อกำหนด) หรือ Validator ไม่ทันสมัยกับสถานะปัจจุบันของวิกินั้น

ในขณะที่เขียน (20130326) X-UA-Compatible ปรากฏบนหน้าวิกิภายใต้หัวข้อที่ระบุว่า: "ส่วนขยายที่เสนอต่อไปนี้ยังไม่เป็นไปตามข้อกำหนดการลงทะเบียนทั้งหมดในข้อมูลจำเพาะของ HTML ดังนั้นจึงยังไม่ได้รับอนุญาตให้ใช้ได้ เอกสาร " ดังนั้นตัวตรวจสอบความถูกต้องจึงถูกต้องที่จะปฏิเสธค่านี้


8
หน้าวิกิไม่ถูกต้อง <meta name= ...คนที่คุณเชื่อมโยงไปสำหรับ สำหรับ<meta http-equiv=...เพจคือwiki.whatwg.org/wiki/PragmaExtensions
Alohci

6
หน้าวิกิที่ถูกต้องมีX-UA-Compatibleดังนั้นทางเลือก“ ตัวตรวจสอบความถูกต้องไม่ทันสมัย” จึงใช้ แม้แต่validator.nu (ซึ่งได้รับการกล่าวขานว่าทันสมัยกว่าโดยทั่วไป) ก็ล้าสมัยในแง่นี้
Jukka K. Korpela

ขอบคุณสำหรับการแก้ไข ฉันไม่ทราบว่าค่าสำหรับแอตทริบิวต์เมตาถูกแบ่งออกเป็นสองหน้า
Quentin

1
X-UA-Compatibleดูคำตอบของฉันสำหรับตัวอย่างของวิธีการแก้ไขตรวจสอบเพื่อสนับสนุนการ stackoverflow.com/a/21048010/1006963
darcyparker

ดังนั้นฉันจะแก้ไขปัญหาจาก w3c validator ได้อย่างไร .. ฉันจะลบแท็กได้อย่างไร
Krish

42

หากคุณต้องการทำให้มันถูกต้องในทางเทคนิค (ทุกคนชอบที่จะเห็นไอคอน Fav สีเขียว) โดยไม่มีผลต่อการทำงานใด ๆ คุณควรจะรวมไว้ในแท็ก "if IE" ได้

<!--[if IE]><meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'><![endif]-->

22
วิธีนี้ปิดใช้งานการรองรับ Chrome Frame ของคุณอย่างมีประสิทธิภาพเนื่องจาก Chrome Frame ละเว้นความคิดเห็นตามเงื่อนไขของ IE โปรดดูjeffreybarke.net/2010/08/…
Jasper Moelker

5
@JasperMoelker: อาจจะคุ้มค่าที่จะกล่าวถึงว่าบทความที่คุณให้ลิงก์ไปนั้นมีวิธีแก้ปัญหาสำหรับ Chrome Frame ด้วยซึ่งยอดเยี่ยมมาก: การตรวจสอบความถูกต้อง + รองรับ Chrome Frame!
ลุค

5
ไม่ไม่ไม่สิ่งนี้ทำลาย X-UA-Compatible xn--mlform-iua.no/blog/…
brentonstrine

30

วิธีแก้ปัญหาหนึ่งที่เป็นไปได้คือการติดตั้งฟิกซ์ฝั่งเซิร์ฟเวอร์ในส่วนหัวตามที่แนะนำไว้ในบทความที่ดีนี้โดย Aaron Layton (เครดิตทั้งหมดควรไปที่เขาและฉันจะถอดความออกมาแทนที่จะลอกเลียนแบบ ... )

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

"เมื่อ Internet Explorer มาเจอบรรทัดนี้มันจะเปลี่ยนเอ็นจิ้นที่ใช้กับ Chrome Frame แรกหากติดตั้งปลั๊กอินแล้วไปที่ Edge (โหมดเอกสารที่รองรับสูงสุดของเบราว์เซอร์)"

ขั้นตอน :

  • แก้ไขการตรวจสอบความถูกต้องของเพจ - ทำได้โดยการลบแท็กออก
  • ความเร็วในการแสดงผล - แทนที่จะรอให้เบราว์เซอร์เห็นแท็กแล้วเปลี่ยนโหมดเราจะส่งโหมดที่ถูกต้องล่วงหน้าเป็นส่วนหัวการตอบสนอง
  • ตรวจสอบให้แน่ใจว่าเราแสดงเฉพาะการแก้ไขสำหรับ Internet Explorer - เราจะใช้การตรวจจับเบราว์เซอร์ฝั่งเซิร์ฟเวอร์บางส่วนและส่งไปยัง IE เท่านั้น

ในการเพิ่มส่วนหัวใน PHP เราสามารถเพิ่มสิ่งนี้ในหน้าของเรา:

if (isset($_SERVER['HTTP_USER_AGENT']) &&
    (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false))
        header('X-UA-Compatible: IE=edge,chrome=1');


หรือคุณสามารถเพิ่มลงในไฟล์. htaccess ได้ดังนี้:

<FilesMatch "\.(htm|html|php)$">
    <IfModule mod_headers.c>
        BrowserMatch MSIE ie
        Header set X-UA-Compatible "IE=Edge,chrome=1" env=ie
    </IfModule>
</FilesMatch>


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

แก้ไขค่าไม่ถูกต้อง X-UA-Compatible ครั้งแล้วครั้งเล่า

หวังว่านี่จะช่วยได้!


1
ในขณะที่เขียนนี้โซลูชันนี้จะใช้งานในไฟล์ HTML5BP. htaccess ดังนั้นหากเซิร์ฟเวอร์ Apache ของคุณเปิดใช้งาน mod_headers คุณจะปลอดภัยที่จะลบออก<meta>จากไฟล์ html
แพทริคเจมส์แมคดูเกิล

ถ้าคุณใช้ Spring MVC เหมือนฉันมันก็ยังค่อนข้างง่ายที่จะทำ คุณกำลังมองหา: response.addHeader("X-UA-Compatible", "IE=edge,chrome=1");แต่นี่คือส่วนสำคัญ GitHub แบบเต็มนี่เป็นส่วนสำคัญ
Paul Nelson Baker

1
@PatrickJamesMcDougle ฉันต้องเปิดใช้งานทั้งheadersและsetenvifmods บนเซิร์ฟเวอร์ Apache ของฉันเพื่อให้มันใช้งานได้
iglvzx

สิ่งนี้จะถูกเพิ่มหรือไม่? ควรเป็นสิ่งแรกหรือไม่?
Staysee

1
W3C HTML validator ดูแลที่นี่ หากคุณใส่ "chrome = 1" ลงในค่าการแก้ปัญหาในคำตอบนี้จะไม่ทำงานอีกต่อไปเพราะเราได้เพิ่มการตรวจสอบสำหรับส่วนหัวแล้ว (พร้อมกับการตรวจสอบองค์ประกอบเมตา) และ ตามข้อกำหนด HTML ในตำแหน่งใดตำแหน่งหนึ่ง (องค์ประกอบเมตาหรือส่วนหัว) ค่าเดียวที่อนุญาตคือ "IE = Edge"
โชว์บาร์เกอร์


2

.. นี่อาจเป็นคำตอบที่ดี?

ตั้งค่า HTTP Header ด้วย PHP:

นี่ไม่ใช่งานของตัวเอง แต่หวังว่าจะเป็นประโยชน์กับคนอื่น ๆ ด้วย


7
โปรดทราบว่าคำตอบแบบลิงก์เท่านั้นไม่ได้รับการสนับสนุน (ลิงก์มักจะค้างเมื่อเวลาผ่านไป) โปรดพิจารณาแก้ไขคำตอบของคุณและเพิ่มเรื่องย่อที่นี่
bummi

1

หากคุณดาวน์โหลด / สร้างรหัส src ของ validator คุณสามารถเพิ่มการสนับสนุนด้วยตัวคุณเอง

เพิ่มสิ่งต่อไปนี้ลงในไฟล์เช่นhtml5-meta-X-UA-Compatible.rnc) จากนั้นรวมไว้ในhtml5full.rncแล้วรวมไว้ใน

ฉันทำสิ่งนี้แล้วและได้ผลดีสำหรับการตรวจสอบความถูกต้อง

meta.http-equiv.X-UA-Compatible.elem =
  element meta { meta.inner & meta.http-equiv.X-UA-Compatible.attrs }
  meta.http-equiv.X-UA-Compatible.attrs =
    ( common.attrs.basic
      & common.attrs.i18n
      & common.attrs.present
      & common.attrs.other
      & meta.http-equiv.attrs.http-equiv.X-UA-Compatible
      & meta.http-equiv.attrs.content.X-UA-Compatible
      & ( common.attrs.aria.role.presentation
        | common.attrs.aria.role.menuitem
        )?
    )
    meta.http-equiv.attrs.http-equiv.X-UA-Compatible = attribute http-equiv {
      xsd:string {
        pattern = "X-UA-Compatible"
      }
    }
    meta.http-equiv.attrs.content.X-UA-Compatible = attribute content {
      xsd:string {
        pattern = "IE=((edge)|(EmulateIE(7|8|9|10))|7|8|9|10|11)(,chrome=(1|0))?"
      }
    }

common.elem.metadata |= meta.http-equiv.X-UA-Compatible.elem

0

โปรดลบออก,chrome=1จากเมตาแท็กมันจะทำงานได้ดี ด้วย validator:

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

-1

ฉันมีปัญหาเดียวกันและการเพิ่มและเพื่อล้อมรอบทั้งบรรทัดนั้นช่วยแก้ไขสถานการณ์ได้

<!--[if IE]><meta http-equiv="x-ua-compatible" content="IE=9" /><![endif]-->

1
มีใครรู้บ้างไหมว่าทำไมถึงถูกโหวตลง? มันทำให้ validator ทำงานได้อย่างถูกต้อง
Maciej Paprocki

2
อาจเป็นเพราะไม่ได้บรรลุอะไรจริง 1. ความคิดเห็นแบบมีเงื่อนไขใช้ไม่ได้ใน IE10 ขึ้นไป 2. X-UA-Compatible ใช้สำหรับสร้างเบราว์เซอร์รุ่นใหม่เลียนแบบเวอร์ชันเก่า ดังนั้นสิ่งที่บรรทัดนี้บอกได้อย่างมีประสิทธิภาพคือ 1. IE 10 & 11 แสดงผลโดยใช้โหมดเริ่มต้น (เนื่องจากพวกเขาไม่ได้แยกวิเคราะห์ความคิดเห็นตามเงื่อนไขอีกต่อไป) 2. IE 9 แสดงผลเป็น IE 9 (เช่นโหมดเริ่มต้นในกรณีส่วนใหญ่) 3. IE <9 แสดงผลโดยใช้โหมดเริ่มต้น (เนื่องจากไม่สามารถเลียนแบบเบราว์เซอร์ที่ใหม่กว่าได้)
aleayr

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