私は言語の知識を超えたJavascriptカーファッフルを持っています。
CKEditor用のカスタムプラグインを作成しています。プラグインは、CKEditorによって生成されたDIVで開くIFrameです。
IFrame内には、いくつかの画像を表示しています。ユーザーがこれらの画像の1つを選択すると、その画像を表示するために必要なHTMLコードがCKEditorに挿入されます。
これを動的に行うことは、私が立ち往生しているところです。私は次のようにIframe内からCKEditorインスタンスに接続しています:
var CKEDITOR = window.parent.CKEDITOR;
CKEditorは、[OK]ボタン(CKEDitorによってレンダリングされた)がクリックされたときにトリガーされる「OKリスナー」を提供します。そのOKリスナーはIFrameの外にあります。
静的な値で機能するOKリスナーを定義すると、次のように機能します。
var okListener = function(ev) {
this._.editor.insertHtml('<img class="symbol" src="my_static_symbol.gif">');
CKEDITOR.dialog.getCurrent().removeListener("ok", okListener);
};
// Assign OK listener
CKEDITOR.dialog.getCurrent().on("ok", okListener);
しかし、OKリスナーを割り当てたときの戻り値はまだわからないので、次のようなことをする必要があります。
var okListener = function(ev) {
this._.editor.insertHtml('<img class="symbol" src="'+my_dynamic_value()+'">');
CKEDITOR.dialog.getCurrent().removeListener("ok", okListener);
};
// Assign OK listener
CKEDITOR.dialog.getCurrent().on("ok", okListener);
my_dynamic_value
しかし、CKEditorの「OK」ボタンによって起動された時点で関数のスコープ外にあるため、これは機能しません。
もちろん、ユーザーがリストで別の画像を選択するたびに、okListener
関数を更新し、それを使用して現在の値をハードコーディングするeval
こともできます。しかし、それは私にとって恐ろしい資源の浪費のように感じます。
okListener()内からIframeからのものにアクセスできるように使用できるスコープトリックはありますか?
これが十分に明確であることを願っています。そうでない場合は、コメントして明確にします。