老蔡的个人专栏正式成立,以后工作中遇到的技术问题,或者生活中对一些事物的见解,都会和大家分享!独乐乐不如众乐乐!

ckfinder的诡异错误 Uncaught TypeError : Cannot set property ‘id’ of undefined

WEB前端 BlandonTsai 3210℃ 0评论

目前为止,处理过的项目中很多都涉及到了富文本编辑器,貌似每个项目都有发布内容、动态或者文章的需求。我曾经做过 fckeditor 、fckeditor+ckfinder、ueditor、ckeditor、ckeditor+ckfinder 的各种多样化配置,虽然一开始困难重重,不过后来回头一看都是淡然一笑。

在我的记忆里,富文本编辑器、文件浏览器应该都是我手到擒来的事,自从完全攻克后再也没把这类的技术问题放在心上。直接这次遇到的这个诡异无比的问题,苦恼了我好几天的时光。

ckfinder Uncaught TypeError

跟以前的需求一样,项目中需要 ckeditor + ckfinder 的整合配置,我多多少少按以前的步骤配置了各个文件。具体配置可参考:最新版本的 ckeditor 与 ckfinder 整合流程及注意事项

配置完成后,我测试了一下 js 调用 ckfinder ,发现功能正常。然后测试了一下 ckeditor ,发现加载正常。最后,在 ckeditor 中打开 ckfinder 图片浏览功能时,打开的窗体一片空白,文件浏览功能加载失败!

一开始我以为是不是 ckeditor 、ckfinder 的配置文件什么地方配错了,前后检查了一遍完全没有问题。那是什么问题呢?JS 中也能调整 ckfinder ,说明 ckfinder 的版本包是完整的。唯一的问题就是,现在 ckeditor 突然调不动 ckfinder 了?

为了预防万一,我把 ckeditor 的配置文件 config.js 中涉及嫁接 ckfinder 的链接路径以相对和绝对的方式分别测试了一下。因为我现在使用的框架 struts+spring+mybatis 版本相对以前的公司或者同事使用的版本都更新,不能保证会不会是框架的问题,可是测试结果还是一样。

ckfinder.html Uncaught TypeError : Cannot set property ‘id’ of undefined

直到我在浏览器的调试框里发现了 js 报错。ckfinder 是以整个文件包的形式引入的,里面的源码几乎没有动过,以前功能都是正常的,为什么现在不行了呢?

为了以防在不知情的情况下误动了其中的个别文件,我把文件包删除掉,又重新从其他项目拷贝了一份。调整相关配置后,发现结果还是异常。在我最擅长的最不在乎的地方被拌了一脚,脸上漫延出一种好无奈的笑,MLGB!我内心还是保持寻找问题的状态,我知道这个问题可能会耽误一定的时间,但最终会解决。因为以前遇到的不少疑难问题都是这个模式,雨过总会天晴。

功夫不负有心人,I found it !

后来,我干脆下载了一个版本的 ckfinder 2.6 (java版本),把 ckfinder.html 与项目中的同名文件进行一行一行的比对,果然有一个地方动了!

上面是 ckfinder.html 中 js 算法的开端代码,而项目中定义的第一句是:

后面的实例化括号被我去除了。我想起上个项目时的情况,在 最新版本的 ckeditor 与 ckfinder 整合流程及注意事项 一文中为了实现图片文件的可迁移性,减少与项目的粘带关系,所以在 ckfinder 浏览文件时添加了图片服务器的绝对路径 fileBasePath。就是配置在 var config 属性里面,以方便下面算法进行替换判断。而现在这个项目并不需要图片服务器,所以我把 fileBasePath 的定义删除掉了,但同时也把括号删除了。word哥,ckfinder.html的原版代码中竟然是带括号的!改正后,功能恢复正常。

一个大括号纠结了几天的时光,这就是上个项目带来的经验之雷,一不小心就炸的粉身碎骨。这就是项目经验带来的负累,脑海中恍然飘过一句话:人生若只如初见,那该多么美好啊!

转载请注明:似水流年 » ckfinder的诡异错误 Uncaught TypeError : Cannot set property ‘id’ of undefined

如果觉得文章还不错,欢迎打赏
喜欢 (0)or分享 (0)
头像
发表我的评论
取消评论