![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Mam problem z dynamicznym tworzeniem edytorów TinyMCE w Google Chrome. Wyświetlą się tylko przy pierwszym wyświetleniu strony, a potem już nie (nie ma błędów w konsoli!) albo na odwrót.
Edytory mogą ładować się na 2 sposoby: 1. Na żądanie - podczas ładowania strony (wywołane w <body>) 2. Na żądanie - po załadowaniu strony (np. po kliknięciu przycisku) Proces ładowania edytorów: 1. W sekcji <head> dołączam tradycyjnie plik ładujący loader.js 2. Plik loader.js wygląda tak:
3. Natomiast instancje obiektu Editor są tworzone w sekcji <body> za formularzem: Bawiłem się w Firebugu do Firefoksa. Jeżeli strona jest już załadowana, dynamiczne wczytanie głównej biblioteki i dodanie nowego edytora nie działa. Czyżby wina TinyMCE? Przykład:
Funkcja addEvent (chyba) działa prawidłowo, ale gdyby ktoś miał wątpliwości:
Jedynym wyjściem jest ładowanie głównej biblioteki podczas ładowania strony (przed zdarzeniem window.onload)? Jak załadować bibliotekę TinyMCE na żądanie, a następnie wyświetlić edytor tak, aby działał w każdej przeglądarce? Jak sprawdzić, czy wszystkie pliki TinyMCE są załadowane, czyli - czy można już odpalić edytor? Ten post edytował WebCM 11.12.2010, 16:55:04 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat 1. W sekcji <head> dołączam tradycyjnie plik ładujący loader.js Co to jest? Pierwszy raz na oczy widzę. -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Co to jest? Pierwszy raz na oczy widzę. To plik na potrzeby skryptu CMS, aby zachować kompatybilność ze standardowym edytorem. Zamieściłem jego zawartość w punkcie nr 2. Jest po to, aby nie modyfikować oryginalnego tiny_mce.js.Zaproponujcie lepsze rozwiązanie od tego, które przedstawiłem, jeżeli niewiele da się wykombinować ![]() -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Zerkni google pod kątem "tinymce dynamic load" ) Zarzucę jednym z wielu wskazywanych wyników
![]() http://blog.mirthlab.com/2008/11/13/dynami...nces-to-a-page/ -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
To stary sposób wstawiania i usuwania edytorów. Nowe wersje TinyMCE mają do tego celu API. Szukałem w Google innych sposobów, ale nie ma nic ciekawego. Pobawiłem się w Firebugu i wynika, że...
Po załadowaniu głównej biblioteki tiny_mce.js wystarczy wywołać Występował inny problem opisany tu: http://tinymce.moxiecode.com/punbb/viewtopic.php?pid=83564 Jak widać, 4 dni temu pojawiła się solucja, którą za chwilę przetestuję. W skrócie: 1. Nie ładuj biblioteki tiny_mce.js wielokrotnie! 2. Używaj opcji strict_loading_mode Przestroga: tinyMCE jest skrótem do obiektu tinymce.EditorManager - to nie to samo co tinymce! Problem w Chrome powraca. Edytory TinyMCE wyświetlą się tylko po odświeżeniu strony. W przeciwnym przypadku widać, że plik tiny_mce.js ładuje się i nic. Zbadałem przyczynę. Okazuje się, że zdarzenie HTMLScriptElement.onload nie zawsze występuje! Funkcja include() wygląda tak: Dla pewności zbadałem, że WebKit NIE ma własności readyState. Podejrzewam, że nie da się zrobić nic więcej. Sami przetestujcie na własnych skryptach, czy to błąd, czy funkcja (bug or feature) ![]() Na pewno programiści zgłaszali błąd zarówno do Google i do Apple i nic. AKTUALIZACJA Moje pierwsze spostrzeżenia były błędne. Zdarzenie HTMLScriptElement.onload wywołuje się zawsze. To ewidentnie wina TinyMCE, tylko dlaczego w innych przeglądarkach problem nie występuje? Mimo wszystko wierzę, że window.onload w Chrome wywołuje się za wcześnie i stąd metoda tinyMCE.init() nie działa. AKTUALIZACJA 2 Znalazłem przyczynę. Klasa tinymce.dom.EventUtils działa nieprawidłowo na silniku WebKit. Funkcja add: Kod if (n == 'init') t.inits.push(cb); to ostatnia ważna operacja. Potem nic się nie dzieje. Wywołanie:{ if (t.domLoaded) { console.log('DOM loaded - callback will be called'); cb(); } else { console.log('DOM not ready - put callback onto stack'); t.inits.push(cb); } return cb; } Kod Event.add(document, 'init', function() { Są tylko 2 miejsca, gdzie własność .domLoaded jest ustawiana na TRUE: _pageInit and _wait. Inny ważny kod: Kod else if (doc.addEventListener) { orazt._add(win, 'DOMContentLoaded', function() { t._pageInit(win); }); } Kod Event = tinymce.dom.Event = new tinymce.dom.EventUtils(); Oba zdarzenia DOMContentLoaded i onload nie wykonują się, czyli musiały zostać wywołane wcześniej.// Dispatch DOM content loaded event for IE and Safari Event._wait(window); Jednak .domLoaded ma wartość TRUE - który fragment kodu go ustawia, jeżeli _pageInit() nie jest wywoływana? Szukam rozwiązania. Może ktoś już wpadł i nie będę musiał spędzić kolejnego dnia na to ![]() Ten post edytował WebCM 23.12.2010, 12:50:51 -------------------- „Jesteśmy różni, pochodzimy z różnych stron Polski, mamy różne zainteresowania, ale łączy nas jeden cel. Cel ten to Ojczyna, dla której chcemy żyć i pracować.” Roman Dmowski
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.08.2025 - 22:53 |