当前位置: 代码网 > it编程>前端脚本>网页编辑器 > 自己打造HTML在线编辑器的实现难点分析

自己打造HTML在线编辑器的实现难点分析

2024年05月18日 网页编辑器 我要评论
html在线编辑器实际上是什么其实有好几种实现方式,目前用得最多、兼容性最好的还是iframe方式。<iframe src="" frameborder="0"></iframe&g

html在线编辑器实际上是什么

其实有好几种实现方式,目前用得最多、兼容性最好的还是iframe方式。

<iframe src="" frameborder="0"></iframe>

只有这个空iframe是不行的,还要用javascript把它设成可编辑:

iframe.contentwindow.document.designmode = "on";
iframe.contentwindow.document.contenteditable = true;

换而言之,html在线编辑器就是一个可编辑的iframe

加粗、斜体、下划线、加链接等功能如何实现

浏览器已经提供了实现这些功能的接口execcommand

iframe.contentwindow.document.execcommand(cmd, isdefaultshowui, value);

这三个参数的意思分别是:

  • cmd:命令文本,有好多,ie的可以看这里,firefox的可以看这里
  • isdefaultshowui:是否默认显示交互界面,比如加链接的时候,可以通过界面填入链接。不过这个参数存在兼容性问题,一般设为false将其禁用,并另外制作交互界面。
  • value:传入的值,某些命令可以省略。

execcommand的问题是,生成的代码可能不标准,比如在ie下,文字加粗用的是b标签而不是strong标签。

交互问题

用户不可能总是在编辑器中输入,比如加粗、插入图片等功能是通过按钮操作的。假设用户要加粗一段选中的文字,当他按了加粗按钮后,选区以及焦点也会跟着跑到那去,因此选区(选中的文字)丢失,操作也就无法完成;同理,插入图片时插入位置也会丢失。

也就是说,要保存最后出现在编辑器中的选区。我采取的方案是,当焦点在编辑器内的时候,用一个定时器(setinterval)定时获取当前选区。选区编程平时很少用,做起来也有很多兼容性问题,主要是参考微软的msdntextrange controlrange)和mozilla的mdcrange selection)了。

回车问题

在ie下,按回车是换段落,生成<p>,但在firefox下是换行,生成的是<br>。要解决这个问题,就要监听keydown事件,如果检测到按键是回车,就插入“<p></p>”。

获取标准的代码

如何获取编辑的内容呢?这个问题很简单,只要获取iframe页面body中的innerhtml就可以了:

var content = iframe.contentwindow.document.body.innerhtml;

然而,ie下的innerhtml非常不标准:标签名是大写的,属性没有引号包起来,单标签也没有结束符……即便是firefox下获取的代码,也有少量瑕疵。这个时候就要用正则表达式对代码进行标准化处理。

总结

不多说了,做一遍html编辑器,你就会知道ckeditor是多么强大。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com