回答:
編集:このソリューションはバージョン3.x向けです。4.xバージョンの場合は、@ Paulo Nevesからの回答をお読みください
問題は、Pasteプラグインがすべての貼り付けでプレーンテキストの貼り付けを自動的にリセットすることです。だから私たちがする必要があるすべて-それを元に戻します。次のコードが役立ちます。
tinyMCE.init({
...
oninit : "setPlainText",
plugins : "paste"
....
});
setPlainTextの定義
function setPlainText() {
var ed = tinyMCE.get('elm1');
ed.pasteAsPlainText = true;
//adding handlers crossbrowser
if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
ed.onKeyDown.add(function (ed, e) {
if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
ed.pasteAsPlainText = true;
});
} else {
ed.onPaste.addToTop(function (ed, e) {
ed.pasteAsPlainText = true;
});
}
}
だから今はいつも明白だ。
paste_text_sticky_default: true
そしてpaste_text_sticky: true
あなたの設定でトリックをする必要があります。(私は3.5.0.1を使用しています)
.init({ plugins: ["paste"], paste_as_text: true })
、TinyMCE 4.1の魅力のように機能しました。追加の機能は必要ありません。
tinyMCE 3Xまたは4Xでは、状況が少し変わりました。今これを行うことができ、それは正常に動作します。
tinymce.init({
plugins: "paste",
paste_as_text: true
});
私はこのコードでこの問題を解決しました
tinyMCE.init({
...
plugins : "paste",
paste_text_sticky : true,
setup : function(ed) {
ed.onInit.add(function(ed) {
ed.pasteAsPlainText = true;
});
}
....
})
onInit
プロパティed
が未定義であるというJavaScriptエラーが発生します。Unable to get property 'add' of undefined or null reference
私自身、これに遭遇し、TinyMCE 3.4.2以降、次のように簡単に実行できることを発見しました。
paste_text_sticky: true,
paste_text_sticky_default: true
...それは良かった。
使用する方が良いですか:
var ed = tinyMCE.activeEditor;
の代わりに:
var ed = tinyMCE.get('elm1');
ちなみに、TinyMCEは、貼り付けプラグインのデフォルトオプションとして実装することで、これを改善しています。詳細:http ://www.tinymce.com/wiki.php/Plugin: paste
しかし、それはまだ完璧ではありません。したがって、次のスクリプトもすべてのHTMLを無効にします。
// Paste
paste_auto_cleanup_on_paste : true,
paste_remove_spans: true,
paste_remove_styles: true,
paste_retain_style_properties: false,
paste_preprocess : function(pl, o)
{ // Replace <div> with <p>
o.content = o.content.replace(/<div>/gi, "<p>");
o.content = o.content.replace(/<\/div>/gi, "</p>");
o.content = o.content.replace(/<\r\n/gi, "\n");
o.content = o.content.replace(/<\n\n/gi, "\n");
o.content = o.content.replace(/<\n\n/gi, "\n");
// Replace empty styles
o.content = o.content.replace(/<style><\/style>/gi, "");
o.wordContent = true;
},
paste_postprocess : function(pl, o)
{ //console.log(o.node.innerHTML);
var ed = pl.editor, dom = ed.dom;
// Remove all tags which are not <p> or <br>
tinymce.each(dom.select('*', o.node), function(el)
{ if (el.tagName.toLowerCase() != "p" && el.tagName.toLowerCase() != "br")
{ dom.remove(el, 1); // 1 = KeepChildren
console.log(el.tagName);
}
dom.setAttrib(el, 'style', '');
});
},
出典:http : //www.tinymce.com/forum/viewtopic.php?pid=60121#p60121
何らかの理由でプラグインを使用できない、または使用したくない場合は、次のように独自の「プレーンテキストとして貼り付け」コールバック関数を作成できます。
tinyMCE.init({
// ...,
setup: function (editor) {
// Listen for paste event, add "Paste as plain text" callback
editor.onPaste.add(function (editor, e) {
// Prevent default paste behavior
e.preventDefault();
// Check for clipboard data in various places for cross-browser compatibility.
// Get that data as text.
var content = ((e.originalEvent || e).clipboardData || window.clipboardData).getData('Text');
// Let TinyMCE do the heavy lifting for inserting that content into the editor.
editor.execCommand('mceInsertContent', false, content);
});
}
});
注:これはTinyMCE 3.5.x用に作成されました。互換性はバージョンによって異なる場合があります。
.ymlファイルを使用する場合は、プラグインpaste
を追加し、paste_as_text: true
default:
plugins:
- paste
paste_as_text: true
私は次のようにしました:
var pastePlainText = function() {
// No need to pass in an ID, instead fetch the first tinyMCE instance
var ed = tinyMCE.get(0);
ed.pasteAsPlainText = true;
//adding handlers crossbrowser
if (tinymce.isOpera || /Firefox\/2/.test(navigator.userAgent)) {
ed.onKeyDown.add(function (ed, e) {
if (((tinymce.isMac ? e.metaKey : e.ctrlKey) && e.keyCode == 86) || (e.shiftKey && e.keyCode == 45))
ed.pasteAsPlainText = true;
});
} else {
ed.onPaste.addToTop(function (ed, e) {
ed.pasteAsPlainText = true;
});
}
};
その後:
tinyMCE.init({
// ...
plugins: "paste",
oninit: pastePlainText // Note, without "
// ...
})