#javascript #jquery #ckeditor
#javascript #jquery #ckeditor
Вопрос:
Допустим, у меня установлен CKEditor 4.3 (что я и делаю) с загрузчиком jquery. Я загрузил плагин (назовем его «foobar»), который почти делает то, что я хочу. В плагине есть функция plugin.js файл, который я хотел бы вызвать вручную на странице. Для этого примера давайте вызовем функцию hello() .
Я хочу вызвать ее при нажатии на определенную ссылку.
Как я могу ссылаться на функцию в плагине ckeditor?
Вот plugin.js структура:
(function() {
if (!supportsLocalStorage()) {
CKEDITOR.plugins.add("foobar", {}); //register a dummy plugin to pass CKEditor plugin initialization process
return;
}
CKEDITOR.plugins.add("foobar", {
lang: 'de,en,jp,pl,pt-br,sv,zh,zh-cn', // %REMOVE_LINE_CORE%
version: 0.10,
init: function(editor) {
CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(CKEDITOR.plugins.getPath('foobar') 'css/foobar.min.css'));
if (typeof (jQuery) === 'undefined') {
CKEDITOR.scriptLoader.load('//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', function() {
jQuery.noConflict();
loadPlugin(editor);
});
} else {
CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(CKEDITOR.plugins.getPath('foobar') 'js/extensions.min.js'), function() {
loadPlugin(editor);
});
}
}
});
function loadPlugin(editorInstance) {
/*
load of random stuff that isn't important for this example..
*/
}
var hello = function() {
alert('hello!');
};
}
Комментарии:
1. функция hello не будет вызываться за пределами IIFE в вашем примере кода. Если вы хотите вызвать ее, вам нужно будет добавить ее к объекту, который вы вызываете CKEDITOR.plugins.add(«foobar», [object]) с помощью (или иметь его где-то глобально в другом месте, что, вероятно, не очень хорошая идея).
Ответ №1:
Правильное определение плагина должно быть следующим:
( function() {
// Definition of the plugin.
CKEDITOR.plugins.add( 'foo', {
init: function( editor ) {
...
}
} );
// Methods and variables related to the plugin but exposed to the public.
CKEDITOR.plugins.foo = {
hello: function() {
...
}
};
} )();
Тогда просто CKEDITOR.plugins.foo.hello()
. Это наиболее распространенный шаблон, используемый среди плагинов ядра CKEditor.
Ответ №2:
Предполагая, что плагин был добавлен что-то вроде:
CKEDITOR.plugins.add('foobar',
{
hello: function() { alert('hello'); }
});
(например, ‘hello’ — это функция объекта, переданная CKEDITOR.plugins.add, а не просто функция в файле).
CKEDITOR.plugins.registered.foobar.hello()
должно работать.
Редактировать: чтобы вызвать hello в вашем примере, вам нужно будет прикрепить его к объекту, который вы передаете в CKEDITOR.plugins.add. например
var hello = function() {
alert('hello!');
};
CKEDITOR.plugins.add("foobar", {
lang: 'de,en,jp,pl,pt-br,sv,zh,zh-cn', // %REMOVE_LINE_CORE%
version: 0.10,
init: function(editor) {...},
hello: hello
});