2014-02-08 44 views
1

所以我正在爲ckeditor(@mentions)寫一個插件。CKEDITOR 4.3.2 IE11權限被拒絕

當您鍵入某些字符(例如「@John」)時,會出現一個用戶可以選擇的Johns列表的下拉列表。當用戶選擇他們想要的下拉列表時,它需要刪除「@John」文本並插入從下拉列表中檢索到的元素。嘗試插入文本時,會出現問題,刪除一些文本並設置currsor位置。

守則

var html = '<span>InsertedElement</span>&nbsp;&nbsp;'; 
// Create the Element to insert 
var newElement = CKEDITOR.dom.element.createFromHtml(html, mentions.editor.document); 
//Insert the element 
mentions.editor.insertElement(newElement); 
//Get a new bookmark 
var tempBookMark = mentions.editor.getSelection().createBookmarks(true); 
// get the data 
var edata = mentions.editor.getData(); 
// set it with the exact same info so not changes (just for the test) 
mentions.editor.setData(edata); 
//set the bookmark 
mentions.editor.getSelection().selectBookmarks(tempBookMark); 
//focas on that position 
mentions.editor.focus(); 

問題

文已被刪除後,當我嘗試訪問mentions.editor.getSelection這適用於Chrome但是在IE11就好()我得到「權限被拒絕」的錯誤。我無法設置書籤,焦點移動到ckeditor的開頭。

[更新] 我進行的進一步測試縮小了問題範圍。評論出mentions.editor.setData(edata);行它停止錯誤。如果我在編輯器實例上使用setData函數,然後嘗試在編輯器實例上運行GetSelection(),它會在IE11中出現錯誤(權限被拒絕),但在Chrome中起作用。它似乎setData函數在IE11中以某種方式鎖定編輯器?我簡化了代碼,使它更容易複製。

+0

沒有完整的工作示例,它很難提供幫助。但是,關於「權限被拒絕」錯誤本身,我知道當您嘗試訪問元素中哪個文檔不存在時,會拋出它,所以也許您將某些東西緩存了太久。 – Reinmar

+0

完整示例使用本地服務非常難以發佈完整的腳本等。我簡化了代碼並提供了進一步的測試用例,可以縮小問題發生的位置。希望這可以幫助@Reinmar?謝謝 – user1619480

回答

4

Editor#setData是一個異步功能。您無法在設置數據後立即使用選擇 - 您必須等待一切準備就緒。因此setData接受回調。

mentions.editor.setData(edata, function() { 
    //set the bookmark 
    mentions.editor.getSelection().selectBookmarks(tempBookMark); 
    //focas on that position 
    mentions.editor.focus(); 
}); 
+0

謝謝,正是我需要的! – evandongen