源码网,源码论坛,源码之家,商业源码,游戏源码下载,discuz插件,棋牌源码下载,精品源码论坛

 找回密码
 立即注册
楼主: ttx9n

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

[复制链接]

7万

主题

861

回帖

32万

积分

论坛元老

Rank: 8Rank: 8

积分
329525
发表于 2011-3-5 23:27:39 | 显示全部楼层 |阅读模式
到目前为止,我已经开发了两个HTML编辑器了,一个用在公司的CMS项目,另一个用在这个Blog(TidyEditor,暂时没有单独发布)。下面总结一下开发的难点以及应对方法。
        
        
            HTML在线编辑器实际上是什么
其实有好几种实现方式,目前用得最多、兼容性最好的还是iframe方式。

只有这个空iframe是不行的,还要用Javascript把它设成可编辑:
iframe.contentWindow.document.designMode = "on";
iframe.contentWindow.document.contentEditable = true;
换而言之,HTML在线编辑器就是一个可编辑的iframe
加粗、斜体、下划线、加链接等功能如何实现
浏览器已经提供了实现这些功能的接口execCommand
iframe.contentWindow.document.execCommand(cmd, isDefaultShowUI, value);
这三个参数的意思分别是:
[U]
  • cmd:命令文本,有好多,IE的可以看这里,Firefox的可以看这里
  • isDefaultShowUI:是否默认显示交互界面,比如加链接的时候,可以通过界面填入链接。不过这个参数存在兼容性问题,一般设为false将其禁用,并另外制作交互界面。
  • value:传入的值,某些命令可以省略。[/U]
    execCommand的问题是,生成的代码可能不标准,比如在IE下,文字加粗用的是b标签而不是strong标签。
    交互问题
    用户不可能总是在编辑器中输入,比如加粗、插入图片等功能是通过按钮操作的。假设用户要加粗一段选中的文字,当他按了加粗按钮后,选区以及焦点也会跟着跑到那去,因此选区(选中的文字)丢失,操作也就无法完成;同理,插入图片时插入位置也会丢失。
    也就是说,要保存最后出现在编辑器中的选区。我采取的方案是,当焦点在编辑器内的时候,用一个定时器(setInterval)定时获取当前选区。选区编程平时很少用,做起来也有很多兼容性问题,主要是参考微软的MSDN(TextRange ControlRange)和Mozilla的MDC(Range Selection)了。
    回车问题
    在IE下,按回车是换段落,生成,但在Firefox下是换行,生成的是
    。要解决这个问题,就要监听keydown事件,如果检测到按键是回车,就插入“
    ”。
    获取标准的代码
    如何获取编辑的内容呢?这个问题很简单,只要获取iframe页面body中的innerHTML就可以了:
    var content = iframe.contentWindow.document.body.innerHTML;
    然而,IE下的innerHTML非常不标准:标签名是大写的,属性没有引号包起来,单标签也没有结束符……即便是Firefox下获取的代码,也有少量瑕疵。这个时候就要用正则表达式对代码进行标准化处理。
    总结
    不多说了,做一遍HTML编辑器,你就会知道CKEditor是多么强大。
  • 回复

    使用道具 举报

    0

    主题

    8878

    回帖

    0

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    0
    发表于 2022-8-25 01:13:49 | 显示全部楼层
    感谢楼主分享
    回复 支持 反对

    使用道具 举报

    6

    主题

    2万

    回帖

    425

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    425
    发表于 2022-9-16 21:55:20 | 显示全部楼层
    不错的源码论坛
    回复 支持 反对

    使用道具 举报

    0

    主题

    1万

    回帖

    0

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    0
    发表于 2022-9-18 07:50:25 | 显示全部楼层
    抽根烟,下来看看再说
    回复 支持 反对

    使用道具 举报

    0

    主题

    2万

    回帖

    61

    积分

    注册会员

    Rank: 2

    积分
    61
    发表于 2023-2-22 21:59:54 | 显示全部楼层
    老衲笑纳了
    回复 支持 反对

    使用道具 举报

    5

    主题

    2万

    回帖

    183

    积分

    注册会员

    Rank: 2

    积分
    183
    发表于 2023-7-7 16:37:13 | 显示全部楼层
    啦啦啦啦啦德玛西亚
    回复 支持 反对

    使用道具 举报

    5

    主题

    2万

    回帖

    183

    积分

    注册会员

    Rank: 2

    积分
    183
    发表于 2023-11-15 01:55:31 | 显示全部楼层
    iiguuubhuiuihu
    回复 支持 反对

    使用道具 举报

    3

    主题

    2万

    回帖

    50

    积分

    注册会员

    Rank: 2

    积分
    50
    发表于 2023-12-2 09:09:57 | 显示全部楼层
    我要金豆金豆金豆
    回复 支持 反对

    使用道具 举报

    3

    主题

    2万

    回帖

    156

    积分

    注册会员

    Rank: 2

    积分
    156
    发表于 2024-3-14 14:32:05 | 显示全部楼层
    数据库了多久撒快乐的健身卡啦
    回复 支持 反对

    使用道具 举报

    0

    主题

    2万

    回帖

    194

    积分

    注册会员

    Rank: 2

    积分
    194
    发表于 2024-4-13 08:31:12 | 显示全部楼层
    的谁vdvdsvdsvdsdsv
    回复 支持 反对

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    手机版|小黑屋|网站地图|源码论坛 ( 海外版 )

    GMT+8, 2025-1-3 05:21 , Processed in 0.068557 second(s), 23 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.

    快速回复 返回顶部 返回列表