IE10的那些坑


IE10的坑

1XML的坑

2、UserAgent改變帶來的影響

3、移除了對條件注釋的支持

4、Flash的不完整支持

5、IE9的改變

 

  隨着W in8的推出,IE10也跟着現身了,現在IE10又增加了對win7的支持,那么新的瀏覽器又有那些新特性呢?作為一個一直以來都問題頗多的IE瀏覽器來說,這一版本又有多少改變?現在咱們來看看

 

改變最大的是它越來越網W3C標准去靠近了,比如從IE9就已經實現的對DOM L2,DOM L3DOM L2 和 L3 事件處理(包括冒泡模型)的完整支持,以及增加了對Html5CSS3的支持。

 

在擁抱W3C的同時,它也就拋棄了之前的很多獨有的東西

1. XML的坑

上次遇到的,IE之前對通過XMLHttpRequest獲得的得到的responseXML 對象自動封裝成MSXML對象,因此有一些特別的方法,但是在IE10中,所有的XML一律采用的是標准的對象,很多特有的方法也就不再被支持,比如說selecNodes(),selectSingleNode

解決方案:

l 可以轉變為msxml對象,使用try catch 避免在其他瀏覽器造成錯誤

var xhr = new XMLHttpRequest();

xhr.open(method, url, true);

try { xhr.responseType = 'msxml-document'; } catch(e){}

//...

var doc = xhr.responseXML;

// 'doc' now contains an MSXML document in IE10’s Standards and Quirks document modes

 

l 徹底的解決方案就是使用標准的,可以用getElementsByTagName方法來代替

http://blogs.msdn.com/b/ie/archive/2012/07/19/xmlhttprequest-responsexml-in-ie10-release-preview.aspx

2.  UserAgent改變帶來的影響

 

IE10自然會更新下UserAgent信息,新的信息為:

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)

由於MSIE后的版本號從一位數變成了兩位數,所以如果是使用字符串檢測的話需要注意避免犯下面這個錯誤

// INCORRECT: will report IE10 version in capture 1 as "1"

var matchIE = /MSIE\s(\d)/;

 

改成下面這種就OK了

// CORRECT: will report IE10 version as "10"

var matchIE = /MSIE\s([\d]+)/;

當然最靠譜的還是使用功能檢測,而不是瀏覽器檢測

 

2. 移除了對條件注釋的支持

條件注釋對於解決IE家族的兼容性問題一直相當有用,但是IE10卻果斷拋棄了對條件注釋的支持(可能是覺得受到了歧視)。不過還好IE對標准的支持已經很好了,可能也不太需要條件注釋了。

<!--[if IE]>

     這段文字在IE10中會被直接無視掉.

   <![endif]-->

 

如果想在10中繼續使用條件注釋,可以強制使用IE9的行為來修復,加入下面這個meta標簽<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">

 

4.Flash的不完整支持

IE10剛開始的版本並沒有加入對flash的支持,因為它推薦使用html5而不是flash,但是應大家強烈的要求還是加入了flash,要提示用戶使用flash,可以加入以下信息

<meta http-equiv="X-UA-Compatible" content="requiresActiveX=true" />

但是對flash的支持有諸多的限制,對有些flash功能不兼容

以下的 Flash 功能開始與 Internet Explorer 10 並不兼容,可能無法在支持 Flash 的網站上提供有效的綜合體驗:

  • 照相機
  • 麥克風
  • 打印
  • 特色書簽(例如,Flash 定位點)
  • 依賴雙擊(播放器使用雙擊來縮放到合適大小,但不會將雙擊作為雙擊事件傳播到  Flash 內容)
  • 使用滾動更新事件和滾動事件
  • 依賴 P2P(適用於 Windows 應用商店應用的 Windows UX 指南不允許創建套接字服 務器)

     依賴以下 Flash 觸控 API:平移、縮放、旋轉、輕掃以及按下並點擊

 

詳細內容:Internet Explorer 10 兼容性手冊

 

附:另外IE9也改變了蠻多東西,摘錄一些常會遇到的點以及常規解決辦法,供大家參考

 

1. 在使用createElement時候不再識別(< >),比如

var elm = document.createElement("<div id='myDiv'>");//會報錯

2. 為了和其他瀏覽器兼容,不再支持方法的指針緩存

var d = document.writeln;

d("<script language=VBScript>");//無法正常執行

d.call(document, "<script language="VBScript">);//解決:使用call

 

3.獲取自定義屬性時候不能使用 . 運算符,而應使用getAttribute()方法,否則獲取失敗

4. 不再支持arguments.caller屬性

5. 間接引用eval方法會報錯,比如

var indirectEval = eval;

indirectEval("myDate = new " + dateFn + ";");//所以直接使用就得了

6. Object中如果包含有類似emebed的回退內容,在IE9中會被識別到DOM中,當使用window[“name”]獲取時候,會同時得到emebed,雖然你只想獲得object

解決:使用功能檢測,若是支持document[“name”],則使用,否則就用window[“name”]

 

7. 文檔中的空白被可以被識別為DOM中的元素

參考:IE9的兼容性文檔


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM