Sarissa 在winxp+sp2或者win2003+sp1上面的單元測試是無法全部通過的,在 testCopyChildNodes 和 testMoveChildNodes 兩個試?yán)袌箦e誤。
跟蹤了一番代碼,確定了問題出現(xiàn)在:copyChildNodes 和 moveChildNodes這兩個函數(shù)的這一行上:
if(ownerDoc.importNode && (!_SARISSA_IS_IE)) {
這個javascript本身是沒有錯的,錯就錯在IE。最新版的IE補丁使IE支持Msxml2.DOMDocument.5.0和Msxml2.DOMDocument.4.0,這兩個ActiveX雖然沒有提供對importNode這個API的支持,但是卻內(nèi)部使用了這個API名字,并且沒有很好的包裝,導(dǎo)致在判斷ownerDoc.importNode 是否存在的時候居然拋了異常。
解決方法之一,是利用邏輯短路原理,調(diào)整判斷邏輯
if((!_SARISSA_IS_IE) && ownerDoc.importNode ) {
這樣在IE上后面一個判斷就不會被執(zhí)行了。
更安全的方法是使用in關(guān)鍵字
if("importNode" in ownerDoc && (!_SARISSA_IS_IE)) {
in關(guān)鍵字不會造成瀏覽器誤會我們要訪問importNode這個內(nèi)部API而拋異常,它只是很忠實的高速我們屬性是否存在。
相關(guān)的討論見:
https://sourceforge.net/forum/forum.php?thread_id=1237853&forum_id=256492
跟蹤了一番代碼,確定了問題出現(xiàn)在:copyChildNodes 和 moveChildNodes這兩個函數(shù)的這一行上:
if(ownerDoc.importNode && (!_SARISSA_IS_IE)) {
這個javascript本身是沒有錯的,錯就錯在IE。最新版的IE補丁使IE支持Msxml2.DOMDocument.5.0和Msxml2.DOMDocument.4.0,這兩個ActiveX雖然沒有提供對importNode這個API的支持,但是卻內(nèi)部使用了這個API名字,并且沒有很好的包裝,導(dǎo)致在判斷ownerDoc.importNode 是否存在的時候居然拋了異常。
解決方法之一,是利用邏輯短路原理,調(diào)整判斷邏輯
if((!_SARISSA_IS_IE) && ownerDoc.importNode ) {
這樣在IE上后面一個判斷就不會被執(zhí)行了。
更安全的方法是使用in關(guān)鍵字
if("importNode" in ownerDoc && (!_SARISSA_IS_IE)) {
in關(guān)鍵字不會造成瀏覽器誤會我們要訪問importNode這個內(nèi)部API而拋異常,它只是很忠實的高速我們屬性是否存在。
相關(guān)的討論見:
https://sourceforge.net/forum/forum.php?thread_id=1237853&forum_id=256492