创建HTML在线编辑器的难点分析
事实上,有几种实现方式,最常用的、最好的兼容性是iframe的方式。
只有空荡荡的iframe是不可能的,Javascript也设置为可编辑:iframe.contentwindow.document.designmode = ;
iframe.contentwindow.document.contenteditable =真;
换句话说,HTML在线编辑器是一个可编辑的iframe。
如何实现粗、斜体、下划线、加链接等功能。
浏览器提供了接口execcommand:iframe.contentwindow.document.execcommand(CMD,isdefaultshowui,值)来实现这些功能。
这三个参数的含义是:
命令文本,有很多,IE可以在这里看到,火狐可以在这里看到。
IsDefaultShowUI:是一个交互界面的默认显示,如添加链接,可以通过接口连接填充。然而,有一个与此参数的兼容性问题,这通常是设置虚假禁用它,并建立一个交互界面。
值:可以忽略传入的值,一些命令。
与execcommand问题是生成的代码可能不标准,例如,在IE中,文本与B标签而不是一个强大的标签加厚。
相互作用的问题
用户不能总是输入编辑器,如增粗、插入图片等功能都是通过按钮操作的。当他按下增厚按钮时,选择和焦点将跟随。因此选定区域丢失,操作无法完成。类似地,插入图片时,插入位置也会丢失。
即在编辑保存的最后选择。我把方案时,重点是在编辑器中获取当前的选择,用一个定时器(setInterval)。选择编程很少使用在任何时间。它也有许多的兼容性问题,主要是指微软MSDN(TextRange ControlRange)和Mozilla的MDC(选择)。
退货问题
在IE中,返回的是一个通道,一代人,而是一个新的线下的火狐浏览器,这是生成的。为了解决这个问题,你会听的KeyDown事件,如果检测到按键,将其插入。
得到标准代码
如何获取编辑器的内容这是一个简单的问题,只要你在iframe页面主体获得innerHTML内容:var = iframe.contentwindow.document.body.innerhtml;
然而,在IE的innerHTML非常非标准:标签名是大写的,属性不包裹起来,与单标签不结束…连码得到在Firefox有少量缺陷。这时,正则表达式是用来规范编码。
总结
我不多说。刚做的HTML编辑器,你就会知道CKEditor是多么的强大。