Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: onload w IE wykonuje się za wcześnie?
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
WebCM
Skrypt wygląda tak:
[JAVASCRIPT] pobierz, plaintext
  1. function Editor(O)
  2. {
  3. //odnośnik do instancji Editor
  4. var that = this;
  5.  
  6. //Jeżeli plik jest niezaładowany, załaduj go
  7. if(!Editor.loaded)
  8. {
  9. include('plugins/editor/tiny_mce.js');
  10. Editor.loaded = true;
  11. }
  12.  
  13. //Funkcja inicjująca edytor
  14. var init = function()
  15. {
  16. if(!O.id) O.id = O.name;
  17. that.o = tinymce.add(new tinymce.Editor(O.id, {
  18.  
  19. /* TinyMCE Settings */
  20.  
  21. }));
  22. that.o.render();
  23. };
  24.  
  25. //Jeżeli cały dokument jest załadowany, od razu ładuj edytor
  26. if(Editor.DOM) init();
  27.  
  28. //W przeciwnym razie umieść ładowanie edytora jako zdarzenie
  29. else addEvent('load', function() { init(); Editor.DOM = true })
  30. }
  31.  
  32. Editor.loaded = Editor.DOM = false;
[JAVASCRIPT] pobierz, plaintext
Natomiast wywołanie edytora w sekcji <body> albo na żądanie:
[JAVASCRIPT] pobierz, plaintext
  1. var e = new Editor(form.element);
[JAVASCRIPT] pobierz, plaintext

W Firefoksie wszystko działa. Niestety, w IE występuje błąd Brak definicji 'tinymce'. Widocznie biblioteka nie zdążyła się załadować przed wywołaniem onload. Jak wyjść z tej sytuacji?

Kiedyś robiłem tak (fragment kodu, drugi argument wywoływany po załadowaniu pliku):
[JAVASCRIPT] pobierz, plaintext
  1. include('plugins/editor/tiny_mce.js', function() {
  2. that.o = tinymce.add(new tinymce.Editor(O.id, {
  3.  
  4. /* TinyMCE Settings */
  5.  
  6. }));
  7. that.o.render();
  8. });
[JAVASCRIPT] pobierz, plaintext
Wtedy pojawił się inny problem - nie zdążyły załadować się inne pliki (np. plik skórki) i edytor nie wyświetlał się we wszystkich przeglądarkach. Byłem zmuszony poczekać, aż załaduje się cały dokument.

Można inaczej - ładować bibliotekę w sekcji <head>. Obawiam się jednak, że znów jakiś plik nie załaduje się, bo reszta jest ładowana dynamicznie. Wada: dłuższe ładowanie strony.

Jak sprawdzić, czy wszystkie skrypty są załadowane? Jest jakieś zdarzenie w IE, które to sprawdza?
wiiir
z pomoca moze przyjsc jquery smile.gif

  1. $(document).ready(function(){
  2. //funkcja ktora chcesz uruchomic
  3.  
  4. });
WebCM
jQuery przychodzi z pomocą na wiele problemów, ale nie stosuję frameworków sad.gif W końcu nie wytrzymam i zacznę używać. Czy znacie rozwiązanie tego problemu? Kombinuję tak dlatego, że edytor może zostać wywołany podczas ładowania strony lub po wykonaniu innej akcji (wtedy onload nie wchodzi w grę).

Niestety, tutaj onload zawodzi w IE.

Natomiast drugi przykład działał bezbłędnie w IE (ciekawe, czy tak szybko ładował pozostałe pliki, czy czekał, aż się załadują), a w innych przeglądarkach były problemy (bo np. plik .js skórki nie był gotowy).
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.