Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ładowanie bibliotek TinyMCE na żądanie, dynamiczne tworzenie edytorów - problem w Chrome
WebCM
post
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
  1. <script type="text/javascript" src="loader.js"></script>

2. Plik loader.js wygląda tak:
[JAVASCRIPT] pobierz, plaintext
  1. function Editor(O)
  2. {
  3. var that = this;
  4.  
  5. //Jeśli nie załadowano tinyMCE, zrób to teraz
  6. if(!Editor.got)
  7. {
  8. include('tiny_mce.js');
  9. Editor.got = true;
  10. }
  11.  
  12. //Funkcja, która dodaje nowy edytor
  13. var init = function()
  14. {
  15. that.o = tinymce.add(new tinymce.Editor(O.id, {
  16.  
  17. //ustawienia wycięte, ale nie mają na to wpływu
  18.  
  19. }));
  20. that.o.render();
  21. };
  22.  
  23. //Jeżeli dokument jest już załadowany
  24. if(Editor.DOM) setTimeout(init,500);
  25.  
  26. //A jeśli nie jest jeszcze załadowany - PATRZ TUTAJ:
  27. else addEvent('load', function() { setTimeout(init,500); Editor.DOM = true })
  28. }
  29.  
  30. Editor.got = Editor.DOM = false;
[JAVASCRIPT] pobierz, plaintext

3. Natomiast instancje obiektu Editor są tworzone w sekcji <body> za formularzem:
  1. <script type="text/javascript">
  2. e = new Editor(formularz.nazwapola);

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:
[JAVASCRIPT] pobierz, plaintext
  1. include('tiny_mce.js', function() {
  2. tinyMCE.init({mode:'none'});
  3. var test = new tinymce.Editor('txt', {theme:'advanced'});
  4. tinymce.add(test);
  5. test.render();
  6. });
[JAVASCRIPT] pobierz, plaintext


Funkcja addEvent (chyba) działa prawidłowo, ale gdyby ktoś miał wątpliwości:
[JAVASCRIPT] pobierz, plaintext
  1. function addEvent(type, f, o, capture)
  2. {
  3. if(window.addEventListener)
  4. {
  5. (o||window).addEventListener(type, f, capture||false)
  6. }
  7. else if(window.attachEvent)
  8. {
  9. (o||window).attachEvent('on'+type, f)
  10. }
  11. else if(!o['on'+type])
  12. {
  13. (o||window)[type] = f
  14. }
  15. }
[JAVASCRIPT] pobierz, plaintext

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
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 01:45