CKEditor + IE7 + 8 'пусто или нет объекта' ошибка - PullRequest
6 голосов
/ 19 августа 2010

Моя проблема в том, что я использую плагин CKEditor 3.4 для jQuery, и он дает мне ошибку в IE 7 + 8 при выполнении вызова $ (selector) .val (html) в редакторе:

Ошибка: 'this. $. innerHTML' равен нулю или не является объектом

... который при запуске в отладчике указывает на эту строку кода в огромном CKEditor.js:

getHtml:function(){var i=this.$.innerHTML;return c?i.replace(/<\?[^>]*>/g,''):i;}

... что переводится как в источнике:

getHtml : function()
{
    var retval = this.$.innerHTML;
    // Strip <?xml:namespace> tags in IE. (#3341).
    return CKEDITOR.env.ie ? retval.replace( /<\?[^>]*>/g, '' ) : retval;
},

Мой обидный код (урезанный, но все еще выдающий ошибку):

var editor_data = $("textarea#body").val();
$("textarea#body").val(editor_data);

... и код textarea для потомков:

<textarea name="body" rows="15" cols="50" class="wysiwyg" id="body"></textarea>

Я попытался воспроизвести в jsFiddle в IE8, но странно то, что он работает так, как задумано. Я хотел бы также предоставить рабочий образец, но я, к сожалению, не могу по независящим от меня причинам.

Я также пробовал это исправление, и оно устранило проблему с ошибкой, но после этого setData не работало должным образом и просто переписало содержимое редактора ни с чем. Я признаю эту проблему + исправление немного над моей головой ...: http://dev.ckeditor.com/ticket/4566

(Извините, длинный пост: S) Я также пытался использовать прямой JavaScript API в CKEditor (отказавшись от интеграции с jQuery), и он выдал ту же ошибку.

У кого-нибудь есть что-то, что они хотели бы, чтобы я попытался решить эту проблему, или есть предположения, что это может быть? Было бы очень признательно!

Ответы [ 3 ]

3 голосов
/ 17 декабря 2010

Лично я не фанат существующего ответа, который состоит в изменении исходного кода, потому что, как только вы обновите ckEditor, вам придется помнить об изменении исходного кода еще раз. У меня была та же проблема, что и у оригинального постера, и я нашел исправление, которое считается взломанным, но полностью пригодным для использования. Просто попробуйте сделать все, чтобы в IE8 было все хорошо. Теперь для тестирования в IE7. Другим преимуществом этого исправления является то, что при сбое у вас не останется пустых данных, а вы получите фактический контент, который пытались получить.

var editor = $('textarea.editor').ckeditorGet();
var vPageContent = "";
try{
    vPageContent = editor.getData();//function call fails here
} catch(err){
    vPageContent = editor.getData();//but will work here
}
1 голос
/ 17 декабря 2010

будьте осторожны с лишней запятой.IE не любит exra запятых.Вы можете проверить код для дополнительной запятой с json lint

1 голос
/ 19 августа 2010

Может быть не лучшим решением, но взгляните на это: http://dev.ckeditor.com/ticket/4566

Он утверждает, что замена

getHtml:function(){var i=this.$.innerHTML;return c?i.replace(/<\?[^>]*>/g,''):i;},

на

getHtml:function(){return (this.$) ? this.$.innerHTML : "";},

решитэта проблема.

Я не утверждаю, что это правильный ответ, но у меня была та же проблема сегодня, и (пока) она, кажется, работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...