2011-03-21 39 views
13

我在我的網站上使用NicEdit WYSIWYG插件。Chrome中的NicEdit錯誤

它引起我注意的是,當NicEdit在Chrome實例化時,會生成以下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插件...

感謝(提前)對你的幫助。

回答

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採樣頁面。

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(); 
},