onpaste
CKEditor 3.xでイベントを添付する方法を知っている人はいますか?
基本的に、CTRL+Vデータを取得し、それにいくつかのテキストを追加してから、エディターに追加したいと思います。
私は周りを見回しましたが、決定的な答えは見つかりませんでした。CKEditorフォーラムはあまり役に立ちません。
これでうまくいくはずです
var editor = CKEDITOR.instances.YourInputControlName;
editor.on('paste', function(evt) {
// Update the text
evt.editor.setData(evt.editor.getData() + ' your additional comments.');
}, editor.element.$);
あなたの両方の例は少し合成です。
最初は editor.getData() でエディタの中身を全て取得するので、貼り付けたデータだけを処理したい場合は ev.data.html を取得して正しい場所に貼り付ける必要があります。
editor = CKEDITOR.instances.editor1;
editor.on('paste', function (evt) {
var editor = evt.editor;
evt.stop(); // we don't let editor to paste data, only for current event
// show loader that blocks editor changes
$.post('clean.php', {html: evt.data.html}, function (data) {
editor.insertHtml( data.html ); // text will be inserted at correct place
// hide loader
}, 'json');
});
関数 editor.setReadonly(true/false) を使用しないでください。テキストを正しい場所に貼り付けることができません (非同期データ処理の場合)。
この例では、すべての img 要素を削除して、貼り付けるコンテンツを編集します。
CKEDITOR.on('instanceReady', function (ev) {
ev.editor.on('paste', function (ev) {
ev.data.html = ev.data.html.replace(/<img( [^>]*)?>/gi, '');
});
});
私はそれが古い質問であることを知っていますが、カスタムの「クリーナー」を使用できるようにするため、私のバージョンのaliaksejの回答を追加すると思いました-以下のように改造するまで、うまくいきませんでした。
editor = CKEDITOR.instances[id];
editor.on('paste', function (evt) {
evt.stop();
$.post('/actions/clean.php', {html: evt.data.dataValue}).done(function (data) {
evt.editor.insertHtml(data);
}, 'json');
});
editor = CKEDITOR.instances[id];
editor.on('paste', function (evt) {
evt.stop();
var data = evt.data.dataValue;
if (window.chrome || window.safari) {
// removing span wrapper on webkit browsers.
data = $(data).html();
}
evt.editor.insertHtml(data);
});