У меня сбои в Javascript, которые выходят за рамки моего знания языка.
Я создаю собственный плагин для CKEditor. Плагин - это IFrame, который открывается в DIV, сгенерированном CKEditor.
Внутри IFrame я показываю несколько изображений. Если пользователь выбирает одно из этих изображений, HTML-код, необходимый для отображения этого изображения, вставляется в CKEditor.
Динамически делая это, где я застрял. Я подключаюсь к экземпляру CKEditor из Iframe следующим образом:
var CKEDITOR = window.parent.CKEDITOR;
CKEditor предлагает «прослушиватель OK», который срабатывает при нажатии кнопки OK (отображаемой CKEDitor). Этот хороший слушатель находится за пределами 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.
Конечно, я мог бы каждый раз, когда пользователь выбирает другое изображение в списке, обновлять функцию okListener
и жестко кодировать текущее значение, используя eval
. Но для меня это ужасная трата ресурсов.
Есть ли какой-то трюк с областью действия, который я могу использовать, чтобы получить доступ к вещам из моего Iframe из okListener ()?
Надеюсь, это достаточно ясно. Если это не так, прокомментируйте, и я уточню.