X-UA-Compatible
來了解一下 X-UA-Compatible 是甚麼東西?
首先這個東西會出現在甚麼地方呢?
通常是網頁原始碼的開頭META就會看到(當然不一定都會有),
範例如下
<head>
<title>這是測試網頁</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=5">
</head>
Code language: HTML, XML (xml)
那這個 X-UA-Compatible 是幹嘛的呢?
X-UA-Compatible是 <meta> 的一個屬性,
它告訴IE要採用何種IE版本去渲染網頁。
為什麼要指定IE版本呢?
因為某些網頁的設計,無法適應較新版的瀏覽器,
所以使用X-UA-Compatible來強制IE採用低版本去渲染。
譬如使用下面這段程式碼後,
開發者無需考慮網頁程式碼在IE8上是否正常,
只要確保網頁在IE7下的表現正常就可以了。
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
Code language: HTML, XML (xml)
文件模式
然後介紹一個東西叫做「文件模式」
https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/compatibility/jj676915(v=vs.85)?redirectedfrom=MSDN
文件模式可以透過HTTP Header 與 HTML 或是IE開發者工具控制。
而 HTML 的部分又可以有兩個地方去做控制,
第一個是開頭的<!DOCTYPE>
第二個就是 Metadata 的 X-UA-Compatible
而IE的套用原則順序如下:
- 若網頁同時有<!DOCTYPE>及X-UA-Compatible Header,以Header為準
- 若瀏覽器支援X-UA-Compatible Header,但不支援Header指定的文件模式,將採用最高文件標準(IE=Edge)
- 舊版瀏覽器如不支援X-UA-Compatible Header,由<!DOCTYPE>決定
- IE9(含)以前會以IE5(Quirks) Mode顯示沒有標示<!DOCTYPE>的網頁,建議網頁一律都加<!DOCTYPE html>。
相關的設定寫法
強制IE瀏覽器呈現為特定的版本的標準。
它不支持IE7及以下:
<meta http-equiv="X-UA-Compatible" content="IE=9; IE=8; IE=7"/>
Code language: HTML, XML (xml)
如果用分號分開,它設置為不同版本的兼容級別,IE7、IE9。
它允許不同層次的向後兼容性:
<meta http-equiv="X-UA-Compatible" content="IE=7; IE-9"/>
Code language: HTML, XML (xml)
只選擇其中一個選項:
<meta http-equiv="X-UA-Compatible" content="IE=9">
<meta http-equiv="X-UA-Compatible" content="IE=8"/>
<meta http-equiv="X-UA-Compatible" content="IE=7">
<meta http-equiv="X-UA-Compatible" content="IE=5">
Code language: HTML, XML (xml)
允許更容易的測試和維護。雖然通常比較有用的版本,這是使用模擬:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9"/>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8"/>
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7">
Code language: HTML, XML (xml)
什麼版本IE 就用什麼版本的標準模式:
<meta http-equiv="X-UA-Compatible" content="IE=edge">
Code language: HTML, XML (xml)
使用以下代碼強制IE 使用Chrome Frame:
<meta http-equiv="X-UA-Compatible" content="chrome=1">
Code language: HTML, XML (xml)
最佳的兼容模式方案,結合考慮以上兩種:
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
Code language: HTML, XML (xml)
定文件兼容性模式,在網頁中使用meta元素放入X-UA-Compatible http-equiv 標頭。以下是指定為Emulate IE7 mode兼容性之範例:
<html>
<head>
<!-- Mimic Internet Explorer 7 -->
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
<title> My Web Page </title>
</head>
<body>
</body>
</html>
Code language: HTML, XML (xml)
設定網站服務器以指定預設兼容性模式:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=EmulateIE7" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>
Code language: HTML, XML (xml)
參考文章:
https://www.wibibi.com/info.php?tid=416
https://injerry.pixnet.net/blog/post/57042465
https://blog.darkthread.net/blog/x-ua-compatible-setting/