作者:Ray
2010年02月03日
1.创建问题: 如果是Ajax方式创建,只能使用KE.init与KE.create来创建 如果是非Ajax方式,只能通过Ke.show来创建。2.数据保存问题: 如果是所建即所得的方式来保存数据,需要使用setInterval(new Function('KE.util.setData("'+descId+'")'),500); 而使用SetInterval会导致默认值丢失的bug,因此需要将此段代码放到KE.g[id].afterCreate事件里面。 setData的修改:setData : function(id) { if (KE.g[id].srcTextarea) { var val=this.getData(id); if(KE.g[id].srcTextarea.value!=val&&val) { var valLen=val.length; var start=val.length-6; if(valLen>=7 && val.substring(0,3)=="<p>" && val.lastIndexOf("</p>",start)==start) { val=val.substring(3,val.length-6); this.setFullHtml(id,val); } KE.g[id].srcTextarea.value = val; if(KE.g[id].srcTextarea.onchange) KE.g[id].srcTextarea.onchange(); } } }, 对P的处理是因为浏览器(IE,FF)如果全选编辑器的文字,再进行输入,则会默认生成P标签,在(CHROME)里不会出现。3.图标的处理,由于图标过多,会出现图标DIV宽度超过屏幕总宽度的问题,在Show MENU的时候进行了额外的处理: this.show = function(checkWidth) { this.hide(); var id = arg.id; KE.g[id].hideDiv.style.display = ''; if(checkWidth) { var bodyWidth=document.documentElement.clientWidth||document.body.clientWidth; var leftX=parseInt(this.div.style.left); if(leftX+452>bodyWidth) { leftX=bodyWidth-452-20; this.div.style.left=leftX+"px"; } } KE.g[id].hideDiv.appendChild(this.div); }; 4. 上传图片换成了自己的控件 5.IE里面过滤Word格式,可以不需要弹出纯文本粘贴框。 在KE.create最后加入这段代码: KE.event.ctrl(KE.g[id].iframeDoc, 'V', function(e) { KE.plugin['pastetextfromword'].click(id); }); KE.plugin['pastetextfromword'] = { click : function(id) { //KE.plugin['paste'].click(id); //return; if(window.clipboardData) { var text=""; try { text=clipboardData.getData("Text"); KE.util.selection(id); text = text.replace( /&/g, '&' ) ; text = text.replace( /</g, '<' ) ; text = text.replace( />/g, '>' ) ; text = text.replace(/\r\n|\n|\r/g, "<br />$&"); KE.util.insertHtml(id, text); } catch(e) { KE.plugin['plainpaste'].click(id); } } else KE.plugin['plainpaste'].click(id); }}; 6.对IE ShowModalDialog的支持: 在KE.create事件里面加入代码: if(KE.browser.IE) iframeDoc.body.contentEditable="True"; 同时在创建工具栏的时候,对A元素的href从javascript:;修改为#(防止弹出一个新的窗口)