最近有个需求要把轻量级的富文本换成ueditor,一系列困难给我整不会了。
是这样的,防止dos攻击,项目用了xss把<>转义成< >
,ueditor获取内容的时候非源代码的<>会转义,获取到内容以后xss会把所有<>都转义了,数据回显的时候就会把是字符串的<strong></strong>
变成了html标签展示,测试的时候妥妥的是bug,只能是在非源代码状态下,屏蔽<>
了。
一开始思路是监听内容变化,给<>替换成空,使用ue.addListener("contentChange",function(){
监听,用setContent改内容,接过setContent会触发监听,成死循环了。。。换个思路,先清空内容,在用execCommand('insertHtml', value)
插入,结果莫名出了不少空格换行,又行不通。。。
那就监听按钮吧,这下好使了,
config.ue.ready(function() {
UE.dom.domUtils.on(config.ue.body, "keydown", function (oEvent) {
var oEvent = oEvent || window.oEvent;
//获取键盘的keyCode值
var nKeyCode = oEvent.keyCode || oEvent.which || oEvent.charCode;
// console.log("nKeyCode==========" + nKeyCode);
//获取ctrl 键对应的事件属性
var bCtrlKeyCode = oEvent.ctrlKey || oEvent.metaKey;
var bshiftKeyCode = oEvent.shiftKey || oEvent.metaKey;
// console.log("bCtrlKeyCode========" + bCtrlKeyCode);
// if (nKeyCode == 83 && bCtrlKeyCode) {
// //do something
// //阻止触发默认的ctrl+s事件
// oEvent.returnValue = false;
// }
if (nKeyCode == 190 && bshiftKeyCode) {
//do something
//阻止触发默认的shift+>事件
// console.log("======>>")
oEvent.returnValue = false;
}
if (nKeyCode == 188 && bshiftKeyCode) {
//do something
//阻止触发默认的shift+>事件
// console.log("======<<")
oEvent.returnValue = false;
}
});
});
还没等我开心一下,又想到了粘贴内容带<>,这样行不通,只能改源码
all.js内粘贴前的方法,替换一下,总算是暂时没问题了
me.addListener('beforepaste', function (cmd, html) {
var me = this;
var reg = /[<]+[<>]+[>]/g;
html.html = html.html.replace(reg, '');
var rng = me.selection.getRange();
if (domUtils.findParentByTagName(rng.startContainer, 'caption', true)) {
var div = me.document.createElement("div");
div.innerHTML = html.html;
//trace:3729
html.html = div[browser.ie9below ? 'innerText' : 'textContent'];
return;
}