답변:
편집 : 이 솔루션은 버전 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
당신의 설정에 트릭을 할해야합니다. (I는 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
사용하는 것이 더 낫지 않습니까?
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 용으로 생성되었습니다. 호환성은 버전에 따라 다를 수 있습니다.
나는 다음과 같이했다.
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 "
// ...
})