13

我在我的网站上使用 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 论坛上问这个问题。我希望有人知道这个问题的“快速修复”。在所有其他方面,NicEdit 对我来说都很好,所以我还不愿意切换到不同的 WYISWYG 插件......

在此先感谢您的帮助。

4

3 回答 3

24

问题是 Webkit 的选择对象的实现没有定义createRange( )方法。该方法似乎特定于 Internet Explorer。对于 Webkit 和Gecko DOM 实现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 创建一个示例页面。

于 2011-04-02T01:24:04.753 回答
16

https://github.com/danishkhan/NicEdit上的版本包含此错误修正和其他错误修正。

这个特殊的修复:https ://github.com/danishkhan/NicEdit/commit/efa6a1e8867b745b841157e919a0055cb626d2c4

于 2011-10-03T20:22:09.040 回答
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();
},
于 2011-08-03T11:09:50.347 回答