一定要 http-equiv="X-UA-Compatible" content="ie=edge"?

博客地址

Preface

平時會用 vue 寫新項目,老項目就在原有基礎上更新。對於 vue 這種框架,使用官方的腳手架通常就避免了很多問題,就像平時用模板創建新的單頁一樣。

然而有時總是會遇到些不按模板走的代碼,雖然跑起來也沒有問題,但是放到有些瀏覽器上就有 bug 了,這個時候對既有模板的理解和掌握就很重要了。

Main

當我用 html 模板創建一個新單頁時,拿到的頁面是這樣的,vue 也是類似,至少三個 meta 標籤基本都是一樣的:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>

<body>
</body>

</html>

viewport 是在兼容移動端時才瞭解的內容,費了不少功夫。而 X-UA-Compatible 則是在遇到非常規代碼的時候纔想起來的。有一回改個老項目,用了 transform,在 ie11 上測試,沒有用,而且在它的工具欄裏樣式表裏根本看不到我寫的代碼,這個時候我就好奇了,這是 ie11 啊,怎麼會不支持 transform 呢?然後我瞄了一下開發者工具,大概是這樣的:

截圖20181003201618.png

然後我就好奇了,爲什麼會是 ie7 模式呢?我明明裝的是 ie11 瀏覽器啊,然後腦袋一閃,好像明白了什麼,看了看 html ,果然沒有:

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

加上之後,再刷新,網頁就正常了。

在這件事之前,我知道這個東西,但是因爲是用的模板,一直沒有遇到過這個問題,而且通常來說,我會以爲,我既然是在 ie11 裏打開的,默認你也沒有理由用 ie11- 的文檔模式去渲染啊,結果就錯了。後來看到 SO 上高票答主大概是這麼解釋 ie 的行爲的:

ie 會用它認爲最好的方式去渲染頁面,如果沒有上面那行代碼的話

此外,ie11 已經開始廢棄上面那個了,如果不兼容 ie 的話,其實上面的代碼也可以不用寫了,不過目前爲止 html 模板和 vue 的模板都還是默認支持的。而上面的那行代碼實際意思呢,就是:

Edge:始終以最新的文檔模式來渲染頁面。忽略文檔類型聲明。對於 IE8,始終保持以 IE8 標準模式渲染頁面。對於 IE9,則以 IE9 標準模式渲染頁面。

當然 ie 還可以等於其他值,不過其他值大多都是老版本,目前而言,都沒有必要去糾結了,譬如:

  • "IE=edge"
  • "IE=11"
  • "IE=EmulateIE11"
  • "IE=10"
  • "IE=EmulateIE10"
  • "IE=9"
  • "IE=EmulateIE9
  • ...

Ending

Reference

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章