2010-08-19 12 views
6

Mój problem polega na tym, że używam wtyczki CKEditor 3.4 dla jQuery, i daje mi błąd w IE 7 + 8 podczas wykonywania $ (selektor). val (html) wezwanie redakcji:CKEditor + IE7 + 8 'zerowy lub nie obiekt' błąd

błąd: „. to $ innerHTML” jest null lub nie jest obiektem

... co jeśli jest uruchomiony w debugera, wskazuje na tej linii kodu w ogromnych CKEditor.js:

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

... co przekłada się to w źródle:

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

Mój kod naruszającym przepisy (okrojony, ale nadal daje błąd):

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

... a kod textarea dla potomności:

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

Próbowałem odtwarzania w jsFiddle w IE8, ale dziwne jest to, że działa zgodnie z przeznaczeniem. Chciałbym również dostarczyć próbną próbkę, ale niestety nie mogę z przyczyn pozostających poza moją kontrolą.

Próbowałem również tej poprawki, i to wyjaśniło problem z błędem, ale po tym setData nie działa zgodnie z przeznaczeniem i po prostu nadpisać zawartość edytora z niczym. Przyznam, że ten problem + poprawka jest nieco ponad moją głową ...: http://dev.ckeditor.com/ticket/4566

(Przepraszam, długi post: S) Próbowałem również użyć bezpośredniego API JavaScript do CKEditor (porzucenie integracji jQuery) i wyrzucił ten sam błąd.

Ktoś ma coś, co chciałby, bym spróbował rozwiązać ten problem, lub miałby jakieś przeczucia, co to może być? Byłoby to bardzo doceniane!

Odpowiedz

3

Osobiście nie jestem fanem istniejącej odpowiedzi, która polega na modyfikacji kodu źródłowego, ponieważ zaraz po aktualizacji ckEditor należy pamiętać o ponownym zmodyfikowaniu źródła. Miałem ten sam problem co oryginalny plakat i znalazłem poprawkę, która jest uważana za hack, ale całkowicie użyteczna. Po prostu, Try/Catch sprawiło, że wszystko było w IE8 przyjemne i szczęśliwe. Teraz, aby przetestować w IE7. Inną zaletą tej poprawki jest to, że nie pozostawiasz pustych danych, gdy się nie uda, ale dostajesz rzeczywistą treść, którą próbujesz odzyskać.

var editor = $('textarea.editor').ckeditorGet(); 
var vPageContent = ""; 
try{ 
    vPageContent = editor.getData();//function call fails here 
} catch(err){ 
    vPageContent = editor.getData();//but will work here 
} 
+0

Świetne rozwiązanie! – mmoriar1

1

nie może być najlepszym rozwiązaniem, ale spójrz na to: http://dev.ckeditor.com/ticket/4566

on twierdzi, że zastąpienie

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

z

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

rozwiąże ten problem.

Nie twierdzę, że to jest poprawna odpowiedź, ale miałem ten sam problem dzisiaj i (na razie) wydaje się działać.

+0

Witam!Próbowałem tego i naprawiłem błąd. Jednak nadpisuje moje treści bez niczego (co ma sens, jeśli chodzi o poprawkę). Ponieważ $ zwróciło wartość false, getHtml() zwrócił pusty ciąg znaków, dlatego treść została nadpisana. Widzisz to również? Czy istnieje strona, na którą mogę spojrzeć i może zebrać trochę informacji? Dzięki! – mmoriar1

1

uważać z dodatkowym przecinkiem. IE nie lubi przecinków exra. Możesz sprawdzić swój kod pod kątem dodatkowego przecinka pod numerem json lint

+1

To było dla mnie tak denerwujące! –

Powiązane problemy