Answers:
编辑:此解决方案适用于3.x版,对于4.x版,请阅读@Paulo Neves的回答
问题在于,粘贴插件会自动在每个粘贴上重置纯文本粘贴。所以我们需要做的-重新设置。以下代码将有所帮助。
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
未定义。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 "
// ...
})