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

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)定时获取当前选区。选区编程平时很少用,做起来也有很多兼容性问题,主要是参考微软的MSDN(TextRange ControlRange)和Mozilla的MDC(Range Selection)了。

回车问题

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

获取标准的代码

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

var content = iframe.contentWindow.document.body.innerHTML;

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

总结

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

时间: 2024-10-17 09:34:00

自己打造HTML在线编辑器的实现难点分析_网页编辑器的相关文章

ueditor1.2.1修改超链接默认值,ueditor编辑器新窗口打开连接_网页编辑器

ueditor1.2.1修改超链接默认值 首先超链接的文件是在ueditor目录中的dialogs目录中的link目录的link.html 如图: 然后在链接地址或标题上加value属性和值,希望在新窗口打开,则设置checked属性,如下面红色代码所示. <tr> <td><labelfor="href">链接地址:</label></td> <td><input class="txt"

Office文档在线编辑的一个实现方法_网页编辑器

Office xp之后的版本支持通过webdav协议(http的扩展)直接编辑服务器上的文件. IIS(6.0)支持webdav,这在IIS管理器的web服务扩展中可以看到.利用IIS作为webdav的服务器端,可以很容易的实现office(word,excel等)的在线编辑. 可以简单的实验一下: 确保IIS的webdav扩展安装并被启用了,建立一个虚拟目录test,在其中放一个word文档a.doc,然后打开word, 文件->打开->输入word文档的访问url(http://local

HTML 编辑器 FCKeditor使用详解_网页编辑器

一.简介 功能:所见即所得,支持图片和Flash,工具栏可自由配置,使用简单 兼容性:IE 5.5+.Firefox 1.5+.Safari 3.0+.Opera 9.50+.Netscape 7.1+. Camino 1.0+ 成熟度:使用广泛,被Baidu.CSDN等选用 二.下载 官方下载首页:http://www.fckeditor.net/download/,当前版本为2.5.1 需要下载FCKeditor 2.5.1(FCKeditor_2.5.1.zip)和FCKeditor.Ja

在asp.net中KindEditor编辑器的使用方法小结_网页编辑器

下载下来可是不会用啊,网上也找不到类似的方法,可能都没遇到过这样的问题,,经过一个晚上的研究demo及同事一起帮忙,终于研究出了如何使用,自己总结一下,也希望对以后需要的人有所帮助.这里以一个从数据库读取和保存为例子,其它参数请参考kindeditor官方网站 1.首先把下面拷到要用编辑器的路径 复制代码 代码如下: <input type="hidden" name="content1" id="content1" value='<

一款垃圾中的极品HTML编辑器(兼容IE OR FF)_网页编辑器

这东东实现了一些常用的功能,今天刚完成,大家多给点建议! 在FF下不完善,有些功能暂时还没实现! 这也是本人写的第一个编辑器(处女作哦),做得不好,千万别丢鸡蛋过来... 先闪人! 复制代码 代码如下: /*******************************************   一款垃圾中的极品FreeEditor(2006-08-22)   This JavaScript was writen by CXP. *********************************

为ckeditor编辑器加上传图片的功能_网页编辑器

CKEditor官方演示是有上传图片和浏览服务器文件功能的,但是我们自己下载回来的却没有这两个功能-- 其实还需要下载另外一个组件:CKFinder,用它配合CKEditor来实现上传功能. 官方提供了PHP,Asp.Net和Asp三个语言版本的CKFinder,下载地址:http://ckfinder.com/download 将CKFinder解压缩到网站目录.调用方法如下(假设CKFinder在网站根目录,可以使用相对路径): CKEDITOR.replace( 'editor1', {

针对PHP环境下Fckeditor编辑器上传图片配置详细教程_网页编辑器

开启Fckeditor上传图片功能 考虑到目录安全性问题,默认Fckeditor2.6.6上传功能并未开启,所以第一步我们必须开启Fckeditor上传功能,这里需要注意,由于PHP版本Fckeditor上传功能需要用到chomod函数对新建目录进行权限设置,所以请务必确认在启用Fckeditor上传功能时PHP环境的用户具有创建和更改上传目录的权限. 如果没有开启Fckeditor上传功能,在点击插入/编辑图像按钮,选择上传,在选择完要上传的文件后点击发送到服务器上按钮时会报错误信息如下 复制

FCKEditor网页编辑器 几点使用心得_网页编辑器

1.挂接事件,比如onkeydown事件,要在FCKeditor_OnComplete里实现: 复制代码 代码如下: function FCKeditor_OnComplete( editorInstance ) { if (document.all) // IE editorInstance.EditorDocument.attachEvent("onkeypress", FCKeditor_OnKeyup) ; else// other browser editorInstance

百度UEditor编辑器使用教程与使用方法(图文)_网页编辑器

我们在做网站的时候,网站后台系统一般都会用到web编辑器,今天笔者就给大家推荐一款百度UEditor编辑器.关于这款百度UEditor编辑器官网上也有简单的教程,不过看着比较费劲,今天笔者就跟大家分享一下百度UEditor编辑器使用教程与使用方法,希望对大家有所帮助. 第一:百度UEditor编辑器的官方下载地址 ueditor 官方地址:http://ueditor.baidu.com/website/index.html 开发文档地址:http://ueditor.baidu.com/web