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:
function Editor(O) { var that = this; //Jeśli nie załadowano tinyMCE, zrób to teraz if(!Editor.got) { include('tiny_mce.js'); Editor.got = true; } //Funkcja, która dodaje nowy edytor var init = function() { that.o = tinymce.add(new tinymce.Editor(O.id, { //ustawienia wycięte, ale nie mają na to wpływu })); that.o.render(); }; //Jeżeli dokument jest już załadowany if(Editor.DOM) setTimeout(init,500); //A jeśli nie jest jeszcze załadowany - PATRZ TUTAJ: else addEvent('load', function() { setTimeout(init,500); Editor.DOM = true }) } Editor.got = Editor.DOM = false;
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:
include('tiny_mce.js', function() { tinyMCE.init({mode:'none'}); var test = new tinymce.Editor('txt', {theme:'advanced'}); tinymce.add(test); test.render(); });
Funkcja addEvent (chyba) działa prawidłowo, ale gdyby ktoś miał wątpliwości:
function addEvent(type, f, o, capture) { if(window.addEventListener) { (o||window).addEventListener(type, f, capture||false) } else if(window.attachEvent) { (o||window).attachEvent('on'+type, f) } else if(!o['on'+type]) { (o||window)[type] = f } }
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?