Как вызвать функцию плагина CKEditor 4 на странице?

#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
        });