搞定FCKEditor编辑器下的自动保存功能~ Unknown 2009/07/06

| |

我已经用FCKEditor编辑器代替原始的UBB编辑器很久了,也相应地对FCKEditor作了很多个性化的修改,使之在Bo-blog的后台发挥更大的作用,也使大家的日志写作更为方便!

今天我在Bo-blog的BBS上看到有人提出一个日志保存时自动复制到剪贴板的要求。按我的理解,该用户需要一个自动保存,自动备份的功能即可。因为其实我也会碰到此类问题:写着写着,一不小心,碰到了<-键(我是IBM T43,相当于Alt + <-组合键),返回到了前一页。当我按->键返回到后台撰写页时,我kao,啥也没有了。按理说Firefox相比IE,是有自动记忆表单功能的(尤其是textarea区域),这一点你可以试试。但由于FCKEditor编辑器的缘故,这个基本功能没有正常地发挥作用,很是头痛。

这样一不小心丢失辛辛苦苦写的内容,很是光火!

其实我的FCKEditor编辑器里已经带有了UBB的自动保存功能,但我经过试验了好几次,发现它只记录第一次的内容:即进入编辑状态时的第一次的内容。中间修改的状态它不保存,那这个有什么用啊?根本没用。

fckeditor-autosaver

但我发现点击“保存自动存档”时,Firefox并不报错。什么原因?很有可能是保存的内容存在,但并不是我们编辑的内容。经过我分析这个从UBB编辑器移植来的autosaver.js文件关于savedraft()的函数代码,发现有一行:

var content = blogencode(document.getElementById('content').value);

对比HTML源代码,确实有一个id=content的textarea段,这个对的啊,有什么错呢?但我发现这个textarea是被设置为display:none的。即我们看不到这个textarea,那我们肯定没有编辑这个textarea。所以它的内容一直没有变,然后自动保存功能激发的savedraft()函数始终保存的是这个textarea段的内容,即第一次显示时的初始内容。

知道了原因,如何解决也好办多了。解决办法是将FCKEditor编辑器中的内容用savedraft()函数通过ajax功能后台向服务器保存。

如何获取FCKEditor编辑器的实时内容呢?Google一下,方法就来了:

var content = blogencode(FCKeditorAPI.GetInstance('content').EditorDocument.body.innerHTML);

综上,最兼容的写法是,如果发现有FCKEditor编辑器的内容,就取FCKEditor编辑器的内容,否则就取普通的id为content的textarea的内容。

    //modified by admin of spyrise.org to meet FCKEditor on July 6th, 2009.
if(FCKeditorAPI.GetInstance('content'))
var content = blogencode(FCKeditorAPI.GetInstance('content').EditorDocument.body.innerHTML);
else
var content = blogencode(document.getElementById('content').value);


上面就是如何解决FCKEditor编辑器自动保存功能不正常的解决思路及方法。原谅我上面p话一大堆,我只是想向大家介绍碰到问题如何解决的思路。

最后,对于懒人,请到这里下载我的FCKEditor编辑器版本。我已经将更新版的autosaver.js打包更新进去了。如果你愿意,也可以手工修改一下自己的autosaver.js,代码如何写上面已经注明了。

请给这篇日志评个分吧~!

本文评分: 6.6/10 (36 votes)    提示:您还未对本文评分,您可以进行评分并发表您的意见!

加入收藏!

pan Email Homepage IP
2014/07/01 14:11
xheditor编辑器有没有自动保存编辑文本的功能?
spyrise 回复于 2014/07/02 13:28
兄弟,09年的事情,我已经记不得了。
ZNZ Email Homepage IP
2009/08/10 03:51
你越来越厉害咯~~

佩服哇

刚在坛子里还看到有人要找HTML编辑器
分页: 1/1 第一页 1 最后页
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [注册]