我在我的网站上使用了NicEdit WYSIWYG插件。
我注意到,当在Chrome中实例化NicEdit时,会产生以下Javascript错误:
Uncaught TypeError: Object has no method 'createRange'
这不会阻止插件工作,但我想尽可能防止这种情况发生。这是令人讨厌的方法:
getRng : function() {
var s = this.getSel();
if(!s) { return null; }
return (s.rangeCount > 0) ? s.getRangeAt(0) : s.createRange();
}
NicEdit作为一个项目似乎已经死了,这就是为什么我在这里问这个问题而不是在NicEdit论坛上。我希望有人知道这个问题的'quickfix'。在所有其他方面,NicEdit对我来说效果很好,所以我不愿意转换到另一个WYISWYG插件......
先谢谢你的帮助。
答案 0 :(得分:24)
问题是Webkit的选择对象的实现没有定义createRange( )
方法。该方法似乎是specific to Internet Explorer。对于Webkit和Gecko DOM implementations,createRange( )
方法定义了document
方法。有了这些知识,getRng( )
的修正就变成了:
getRng : function() {
var s = this.getSel();
var rng;
if(!s) { return null; }
if (s.rangeCount > 0) {
rng = s.getRangeAt(0);
} else if ( typeof s.createRange === 'undefined' ) {
rng = document.createRange();
} else {
rng = s.createRange();
}
return rng;
},
我遇到了这个问题,因为我正在为即将开展的项目评估一些富文本编辑器,并且必须使用nicEdit创建一个示例页面。
答案 1 :(得分:15)
https://github.com/danishkhan/NicEdit处的版本包含此错误和其他错误修正。
此特定修正:https://github.com/danishkhan/NicEdit/commit/efa6a1e8867b745b841157e919a0055cb626d2c4
答案 2 :(得分:4)
相同的代码,用nicEdit当前设计编写:
getRng : function() {
var s = this.getSel();
if(!s) { return null; }
return (s.rangeCount > 0) ? s.getRangeAt(0) : (typeof s.createRange == 'undefined') ? document.createRange() : s.createRange();
},