ckeditor - javascriptspellcheck插件

时间:2012-12-21 13:34:43

标签: javascript jquery ckeditor

我正在尝试将javascriptspellchecker集成到一个ckEditor的网页中(注意我使用的是ckeditor版本3.6)。我想用使用javascriptspellcheck的新自定义插件替换默认的拼写检查和SCAYT(键入时拼写检查)插件。

我已经根据javascriptspellchecker网站上的示例创建了一个插件,但它无法正常工作。 javascriptspellchecker删除了textarea的id并对其值进行了拼写检查(或者在选择SCAYT时输入事件处理程序以进行拼写检查)。问题是,当我更改ckEditor实例中的文本时,隐藏的文本框似乎不会在后台更新。这意味着我编写的插件只检查textarea的原始值,并且SCAYT不起作用。

我的插件到目前为止: -

(function () {
    //Section 1 : Code to execute when the toolbar button is pressed
    var a = {
        exec: function (editor) {
            $Spelling.SpellCheckInWindow($(editor.element).attr('id'))
        }
    },

    //Section 2 : Create the button and add the functionality to it
    b = 'javascriptspellcheck';
    CKEDITOR.plugins.add(b, {
        init: function (editor) {
            editor.addCommand(b, a);
            editor.ui.addButton("JavaScriptSpellCheck", {
                label: 'Check Spelling',
                icon: this.path + "images/spell.png",
                command: b
            });
        }
    });
})();

有谁知道是否可以制作一个有效的插件?有没有办法强制编辑器更新隐藏的textarea,还是有另一个DOM元素我可以传递给拼写检查器?

更新

如果它有用,我的插件的SCAYT版本使用以下执行函数

exec: function (editor) {
    $Spelling.SpellCheckAsYouType($(editor.element).attr('id'))
}

更新2:

我找到了正常拼写检查的解决方案,我可以在运行拼写检查之前调用editor.UpdateElement(),它可以正常工作!我不知道为什么,当我用firebug检查原始textarea时,值似乎没有改变。

新的拼写检查插件

(function () {
    //Section 1 : Code to execute when the toolbar button is pressed
    var a = {
        exec: function (editor) {
            editor.updateElement();
            $Spelling.SpellCheckInWindow($(editor.element).attr('id'));
        }
    },

    //Section 2 : Create the button and add the functionality to it
    b = 'javascriptspellcheck';
    CKEDITOR.plugins.add(b, {
        init: function (editor) {
            editor.addCommand(b, a);
            editor.ui.addButton("JavaScriptSpellCheck", {
                label: 'Check Spelling',
                icon: this.path + "images/spell.png",
                command: b
            });
        }
    });
})();

我仍然无法让SCAYT工作。我找到了ckeditor plugin来捕获更改事件,并尝试在每次更改时再次调用updateElement()函数。这不起作用,任何人都可以帮忙吗?

我的SCAYT插件使用ckeditor onchange插件:

exec: function (editor) {
    editor.on('change', function (e) { this.updateElement(); });
    $Spelling.SpellCheckAsYouType($(editor.element).attr('id'));
}

1 个答案:

答案 0 :(得分:2)

在联系JavaScriptSpellcheck的支持后,他们回复说“ SCAYT不能与任何编辑器一起使用,因为它有可能将垃圾HTML注入表单”。所以CK Editor的SCAYT插件是不可能的。在我的问题更新中,CK Editor(v3.6)的工作拼写检查窗口插件的代码如下:

(function () {
    //Section 1 : Code to execute when the toolbar button is pressed
    var a = {
        exec: function (editor) {
            editor.updateElement();
            $Spelling.SpellCheckInWindow($(editor.element).attr('id'));
        }
    },

    //Section 2 : Create the button and add the functionality to it
    b = 'javascriptspellcheck';
    CKEDITOR.plugins.add(b, {
        init: function (editor) {
            editor.addCommand(b, a);
            editor.ui.addButton("JavaScriptSpellCheck", {
                label: 'Check Spelling',
                icon: this.path + "images/spell.png",
                command: b
            });
        }
    });
})();