javascript开发随笔3,开发iframe富文本编辑器的一点体会
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:admin 阅读 318
前段时间有个需求是开发富文本编辑器,这个之前随做过,但看了需求,发现有些地方还需google。就把遇到的问题记录一下。写这篇文章时用的TinyMCE编辑器就很强大,但毕竟是第三方的,项目也考虑了这些

      前段时间有个需求是开发富文本编辑器,这个之前随做过,但看了需求,发现有些地方还需google。就把遇到的问题记录一下。写这篇文章时用的TinyMCE编辑器就很强大,但毕竟是第三方的,项目也考虑了这些,如果做些自定义的东西不太方便。

1.    判断光标位置的元素(或者选中的部分)的样式。光标位置改变的时候更新工具栏对应按钮的样式。什么情况下光标的位置会改变呢?是键盘方向键和鼠标点击,于是就判断键盘事件和鼠标事件来执行光标移动的处理。

 a. 获得光标位置或选中元素:首先getSelection,创建range。然后获得元素,获取到元素之后就可以或得样式、tagName等等,做更多的操作,运行代码:


2.  ie不能保持光标位置,这个是在添加超链接时候出现的问题,当不使用浏览器内置的输入框,光标移动其他的文本域里,ie会失去所选中的部分,无法对选中的部分加链接了,解决办法就是:利用range的getBookmark和moveToBookmark,然后给iframe的document绑定onbeforedeactivate(getBookmark)、onactivate(moveTo),这2个事件的大致意思就是,当被激活和失去激活状态。增加事件之后,就不必保存lastRang或者再其他地方设置bookmark了,可以让ie像其他浏览器一样自动保持光标位置了

View Code
 1 if(Util.browser.msie){
 2             Util.bind(this.E.ifr_win.document, "beforedeactivate", function(){
 3                 var Rng = _self.getRange().range;
 4                 _self.rangeBookMark= Rng.getBookmark();
 5             });
 6             Util.bind(this.E.ifr_win.document, "activate", function(){
 7                 var Rng = _self.getRange().range;
 8                 Rng.moveToBookmark(_self.rangeBookMark);
 9                 Rng.select();
10                 _self.rangeBookMark = null;
11             });
12         }

 

 

3.  ie中的撤销与重做 。 当iframe外部有弹出窗口、或者修改html撤销、重做功能将失效。只能归为ie的bug了。。。。也许ie没分清iframe和页面的document,把他们的撤销、重做混道义了。

如下:

 

如何解决呢? 只能依靠javascript模拟撤销与重做了。网络这方面的资源还是不少的,就不在此详细说明了

 

 4.  iframe自适应高度,依靠setInterval来获取iframe里body高度,赋值给iframe标签。  不知道有没更好的办法呢?

 

5.  做下广告,开发的编辑器地址 ,算是宣传了现在公司和项目了不?需要注册才可以进去的哦

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2