2012-10-22 23 views
1

我正在製作一個可移植文檔,使用純html和javascript,它應該是跨瀏覽器兼容的。我將搜索/熒光筆框和結果頁放在不同的框架中。它在ie,ff和chrome(使用disable-web-security參數)中都可以正常工作,但會在Opera中引發錯誤。我不知道這是爲什麼,這怎麼能解決。Opera從selectNode內容拋出DOMException

任何幫助表示讚賞。

從那裏歌劇院拋出異常的函數:

function selectElementContents(el) { 
    if (window.getSelection && document.createRange) { 
    var sel = window.getSelection(); 
    var range = document.createRange(); 
    range.selectNodeContents(el); 
    sel.removeAllRanges(); 
    sel.addRange(range); 
} else if (document.selection && document.body.createTextRange) { 
    var textRange = document.body.createTextRange(); 
    textRange.moveToElementText(el); 
    textRange.select(); 
} 
} 

Opera的錯誤控制檯:

Uncaught exception: DOMException: WRONG_DOCUMENT_ERR 
Error thrown at line 56, column 8 in selectElementContents(el) in xy.js: 
range.selectNodeContents(el); 
+0

你違反了跨域策略。但沒有代碼很難說在哪裏。如果可以,請添加jsfiddle。 – c69

+0

我會嘗試添加一個jsfiddle ...在這之前,有沒有辦法在opera中禁用這個安全選項?有鉻的參數...在Firefox上它的工作原理,即它需要一個網絡愚蠢的標誌,阻止PDF/XLS鏈接打開... – obeliksz

+0

我不能做jsfiddle,因爲它有幀。 。也許如果高亮功能不是一個幀間函數,它會起作用。該腳本從左框架中調用,並在容器框架中突出顯示單詞。 – obeliksz

回答

3

你需要,你要使用它的文檔中創建的範圍內。我想你已經基礎上的jsfiddle演示已經解決了這一點,但例如線

var range = document.createRange(); 

應該

var range = el.ownerDocument.createRange(); 
相關問題