我不得不調試在IE8中失敗的基於WYSIWYG JavaScript的HTML編輯器。它只適用於IE,所以應該簡化解決方案。下面是現有的代碼失敗:在IE8中對選擇和範圍功能的更改
function isAllowed() {
var sel
var obj
sel = foo.document.selection
if (sel.type != "Control")
{
obj = sel.createRange().parentElement()
} else {
obj = sel.createRange()(0)
}
if (obj.isContentEditable) {
foo.focus()
return true
} else {
return false
}
}
本質上正在發生的事情是,如果你選擇一些文本,然後單擊說插入圖像按鈕,它第一次運行這個isAllowed功能,看是否文本你」已被選中是可編輯的(即在ContentEditable的iframe中)。
這似乎是在IE8分解在document.selection
或createRange()
。
的問題是,當你不用鼠標選擇任何文本,並在編輯區單擊某個地方,sel.createRange().parentElement()
似乎iframe的外面返回的元素,它因此不CONTENTEDITABLE和函數返回假。
我想知道是否有人可以對IE8的選擇和範圍的實現中會發生什麼變化有任何見解,會導致這種行爲?
呵呵,一直在搞IE8調試器幾個小時。我可以看到發生了什麼,基本上如果你沒有選擇任何東西,但是在iframe中有光標,'selection'上的getParent()會返回整個頁面的一大塊。就好像它忽略了iframe。也許問題在於iframe(在代碼中用變量foo引用)。我會進一步挖掘。誰在生產代碼中使用foo!真! (我沒有寫代碼:D) – 2010-07-09 04:15:45
希望你弄明白。也許發生的事情是,當你只點擊試圖獲取iframe的父級而不是iframe中的內容時? – qw3n 2010-07-09 04:28:46