2008-09-23 53 views
5

我們編寫一個插件Xinha文本編輯器來處理腳註怎麼辦。你可以看看: http://www.nicholasbs.com/xinha/examples/Newbie.html當IE的moveToElementText吐出無效參數異常

爲了解決Webkit和IE處理鏈接在行尾的方式的一些問題(沒有辦法使用光標離開同一行的鏈接)我們插入一個空白元素並將選擇移到該元素上,而不是向右摺疊。這在Webkit和Gecko中工作正常,但由於某種原因,moveToElementText正在吐出一個無效參數異常。我們傳遞給它的元素無關緊要,函數似乎完全被破壞了。然而,在其他代碼路徑中,該功能似乎起作用。

要使用上面的鏈接重現錯誤,請在主文本輸入區域中單擊,輸入任意內容,然後單擊具有綠色加號的黃頁圖標,在燈箱對話框中輸入任意內容,然後單擊插入。引起該問題的代碼下面是一個例子:

if (Xinha.is_ie) 
    { 
    var mysel = editor.getSelection(); 
    var myrange = doc.body.createTextRange(); 
    myrange.moveToElementText(newel); 
    } else 
    { 
    editor.selectNodeContents(newel, false); 
    } 

有問題的代碼在SVN在: https://svn.openplans.org/svn/xinha_dev/InsertNote

這個插件是針對在svn的Xinha提供的一個分支建: http://svn.xinha.webfactional.com/branches/new-dialogs

回答

5

這是不可見的片段上方,但使用本身是附加到DOM另一個元素墩已被添加到DOM。當插入一個dom元素時,如果你想引用其兄弟元素,你必須重新檢索你的句柄,因爲句柄是無效的(我不確定,但我認爲它是指文檔片段內的DOM元素,而不是在文檔內部)。從插入操作中重新檢索句柄後,moveToElementText停止拋出異常。

4

我在實現WYSIWYG編輯器的許多不同時間調試此IE異常的不幸經歷,它始終來自訪問DOM節點上的屬性(如.parentNode)或將DOM節點傳遞給函數(例如moveToElementText),而DOM節點當前不在正在呈現的文檔中。

至於你說,有時DOM節點是一塊一個文檔片段的已經從「實際的」 DOM由瀏覽器呈現,有時該節點已根本尚未插入移除。 無論採用哪種方式,DOM節點上都有很多屬性和方法,直到節點在「實際」DOM中正確插入和呈現之後,才能在IE6中安全地訪問這些屬性和方法。

真正的踢球者是IE6的「Invalid Argument」異常的表現不能被try/catch保護。