Ошибка NicEdit в Chrome
Я использую плагин NicEdit WYSIWYG на моем сайте.
Мне пришло в голову, что, когда 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 еще...
Спасибо (заблаговременно) за вашу помощь.
Ответы
Ответ 1
Проблема заключается в том, что реализация объекта выделения для Webkit не определяет метод createRange( )
. Этот метод кажется специфичным для Internet Explorer. Для Webkit и реализаций DEC Gecko метод 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.
Ответ 2
Версия https://github.com/danishkhan/NicEdit содержит это и другие исправления.
Это конкретное исправление: https://github.com/danishkhan/NicEdit/commit/efa6a1e8867b745b841157e919a0055cb626d2c4
Ответ 3
Тот же код, написанный в текущем дизайне 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();
},