emu in blogjava

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks
          Sarissa 在winxp+sp2或者win2003+sp1上面的單元測試是無法全部通過的,在 testCopyChildNodes 和 testMoveChildNodes 兩個試例中報錯誤。

          跟蹤了一番代碼,確定了問題出現在:copyChildNodes 和 moveChildNodes這兩個函數的這一行上:

          if(ownerDoc.importNode && (!_SARISSA_IS_IE)) {

          這個javascript本身是沒有錯的,錯就錯在IE。最新版的IE補丁使IE支持Msxml2.DOMDocument.5.0和Msxml2.DOMDocument.4.0,這兩個ActiveX雖然沒有提供對importNode這個API的支持,但是卻內部使用了這個API名字,并且沒有很好的包裝,導致在判斷ownerDoc.importNode 是否存在的時候居然拋了異常。

          解決方法之一,是利用邏輯短路原理,調整判斷邏輯

          if((!_SARISSA_IS_IE) && ownerDoc.importNode ) {

          這樣在IE上后面一個判斷就不會被執行了。

          更安全的方法是使用in關鍵字

          if("importNode" in ownerDoc && (!_SARISSA_IS_IE)) {

          in關鍵字不會造成瀏覽器誤會我們要訪問importNode這個內部API而拋異常,它只是很忠實的高速我們屬性是否存在。

          相關的討論見:

          https://sourceforge.net/forum/forum.php?thread_id=1237853&forum_id=256492




          posted on 2005-12-09 11:08 emu 閱讀(995) 評論(1)  編輯  收藏 所屬分類: DHTML和JAVASCRIPT 技術

          評論

          # re: 修正Sarissa 的一個小錯誤 2006-05-27 11:00
          我的是WinXP+SP2,測試能通過啊。  回復  更多評論
            

          主站蜘蛛池模板: 喀什市| 周口市| 华蓥市| 福清市| 张家界市| 江川县| 长汀县| 吴旗县| 茌平县| 昌黎县| 潼关县| 牙克石市| 栾城县| 鄂托克旗| 寿宁县| 汨罗市| 霸州市| 唐河县| 陕西省| 维西| 通山县| 九江县| 西充县| 绥化市| 航空| 海门市| 仙游县| 友谊县| 枞阳县| 绥化市| 大理市| 固始县| 尚义县| 什邡市| 陵水| 郴州市| 遵化市| 兰溪市| 广平县| 温州市| 沽源县|