4

javascriptspellcheckerをckEditorを使用してWebページに統合しようとしています(ckeditorバージョン3.6を使用していることに注意してください)。デフォルトのスペルチェックとSCAYT(入力時のスペルチェック)プラグインを、javascriptspellcheckを使用する新しいカスタムプラグインに置き換えたいと思います。

javascriptspellchecker Webサイトの例に従ってプラグインを作成しましたが、正しく機能しません。javascriptspellcheckerは、textareaのIDを取得し、その値に対してスペルチェックを実行します(または、SCAYTを選択するときに、入力後にイベントハンドラーをスペルチェックにアタッチします)。問題は、ckEditorインスタンスでテキストを変更すると、非表示のテキストボックスがバックグラウンドで更新されていないように見えることです。これは、私が作成したプラグインがテキストエリアの元の値のみをチェックし、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
            });
        }
    });
})();

動作するプラグインを作成できるかどうか誰かが知っていますか?エディターに非表示のテキストエリアを更新させる方法はありますか、それともスペルチェッカーに渡すことができる別のDOM要素がありますか?

アップデート:

便利な場合、私のプラグインのSCAYTバージョンは次の実行関数を使用します

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

アップデート2:

通常のスペルチェックの解決策を見つけました。スペルチェックを実行する前にeditor.UpdateElement()を呼び出すことができ、機能します。理由はわかりませんが、firebugを使用して元のテキストエリアを調べたところ、値が変更されていないようです。

新しいSpellcheckプラグイン

(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プラグインを見つけ、変更のたびにupdateElement()関数を再度呼び出そうとしました。これはうまくいきませんが、誰か助けてもらえますか?

ckeditor onchangeプラグインを使用した私のSCAYTプラグイン:

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

1 に答える 1

2

JavaScriptSpellcheck のサポートに問い合わせたところ、「フォームにジャンク HTML を挿入するリスクがあるため、SCAYT はどのエディタでも動作しません」との回答がありました。そのため、CK エディター用の 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
            });
        }
    });
})();
于 2013-01-09T09:00:38.723 に答える