多くのckeditorインスタンスが1つのページで動的に生成され、ckeditorのinstanceReady関数で各ckeditorのインスタンスを取得し、そこからIDを割り当てるiFrameの参照を取得します。ここで、iFrameDocument.getElementById(assignedIframeId)と言ったときにIDを割り当てた後、iFrameが見つかりません。これが私のコードです:
<html>
<body>
<!-- This is the template. The div tag with class="contents" will be replaced with CKEditor -->
<script type="text/html" id="PS_ItemViewModel-template">
<div id="mgrComments" class="document comment-region">
<div class="contents" data-bind="html : mgrComments"></div>
</div>
</script>
<!-- looping the template based on the number of items -->
<div class="ps-item-container" data-bind="foreach : psItems">
<div data-bind="template : {'name' : 'PS_ItemViewModel-template'}, event
: {psItemSetupEditor : _setupEditor, psItemRefreshEditor : _refreshEditor}"></div>
</div>
</body>
</html>
// In the javascript file ...
self._setupEditor = function(data, event){
var domNode = event.currentTarget;
self.editor = self._injectEditorInstance($(domNode).find('div#mgrComments div.contents'), self.mgrComments, self.headerNode, self.criterionNodes);
}
self._injectEditorInstance = function(commentNode, initialText, headerNode, criterionNodes) {
$('div#editor-toolbar').show();
commentNode.ckeditor(function(){
console.log("Inside commentNode.ckeditor ...");
var editor = this;
this.setData(initialText, function(){
//Handles direct changes to editor contents
editor.on('setData', function() {
self.editorChangeHandler(editor);
});
//Handles paste
editor.on('paste', function() {
console.log("In paste event ...");
self.editorChangeHandler(editor);
});
});
}, {customConfig : '/simple_eval/js/ckeditor/SimpleEvalEditorConfig.js'});
return commentNode.ckeditorGet();
};
$(document).ready(function() {
CKEDITOR.on("instanceReady", function(e) {
console.log("In instanceReady ...................................");
var assignedId = e.editor.name + "jspell";
$("#cke_contents_" + e.editor.name+" iframe").attr("id", assignedId);
var iframeDoc = null;
$('#'+assignedId).each(
function(){ iframeDoc=this.contentWindow.document;}
);
console.log(" innerDoc Element = "+iframeDoc.getElementById(assignedId));
fieldsToCheck[fieldsToCheck.length] = [iframeDoc, assignedId];
jspellInit();
});
});
var fieldsToCheck = new Array();
function getSpellCheckArray() {
console.log("In getSpellCheckArray ...................................");
return fieldsToCheck;
}
上記のコードで、console.log( "innerDoc Element =" + iframeDoc.getElementById(assignedId));と言うと nullを出力します。これは、要素がiframeドキュメントで見つからなかったことを意味します。誰かが、iframeに割り当てられたIDを使用して取得できるように、ckeditorのiframeにIDを割り当てる方法について教えてもらえますか?
ありがとう。