1. 程式人生 > >ExtJS 3 不能在IE9下正常執行的簡單解決辦法

ExtJS 3 不能在IE9下正常執行的簡單解決辦法

今天碰到一個問題,我們的一個專案是用ExtJS做的,但在IE9下幾乎完全不能用。排除Bug半天后才發現是ExtJS本身就無法在IE9下正常執行。拋開一些細小的問題,最典型的就是TreePanel根本無法使用,節點都無法點開……google了一下,ExtJS的論壇裡報了這個Bug,但貌似還沒有完美的解決方案。

改ExtJS代價太大了,不如換一種思考方式,讓IE9以相容性模式執行,ExtJS完全沒問題。於是便琢磨怎麼在頁面載入時就告訴IE9執行相容性模式。好在IE官網就提供相關的資訊。不得不說微軟的MSDN還是挺不錯的,雖然瀏覽器一直做的不咋地……

辦法很簡單,在head標籤的第一行加入以下meta標籤:

Html程式碼 收藏程式碼
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
  5. </head>
  6. <body>
  7. ..
  8. </body>
  9. </html>

這樣,IE9就會以IE8的文件模式來解析html。最好把這個meta放在head的第一行,否則不會產生效果。實際上,MSDN的文件說只要放在head中除了title和meta的所有其他標籤之前就行,不過我試過好像沒用,所以為了保險,還是放第一個吧。以下是MSDN文件的原話:

it must appear in the header of the webpage (the HEAD section) before all other elements except for the title element and other meta elements.

另外,如果不清楚IE9執行在什麼模式下的話,可以使用 document.documentMode 來檢視IE9的執行模式,如果是IE9標準模式就會返回9,IE8模式則返回8。以此類推。

注:嚴格來說,此方法實際上是改變文件模式(document mode),而不是瀏覽器模式(browser mode)。實際上,IE9的相容性模式是指的瀏覽器模式。對這兩者的區別,有興趣的可以去看看MSDN。

參考文件:

這個介紹的比較全面,什麼是相容性模式,怎麼判斷,怎麼設定都有涉及,甚至包括怎麼在web server中指定相容性模式……

介紹了幾種瀏覽器模式(browser mode)和文件模式(document mode)。我主要是看這篇裡面的幾種文件模式區別的。