Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> onload w IE wykonuje się za wcześnie?, zanim wszystkie skrypty zostaną odczytane
WebCM
post 28.09.2010, 23:29:03
Post #1





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


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?


--------------------
„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
wiiir
post 29.09.2010, 08:06:49
Post #2





Grupa: Zarejestrowani
Postów: 260
Pomógł: 34
Dołączył: 22.02.2010

Ostrzeżenie: (0%)
-----


z pomoca moze przyjsc jquery smile.gif

  1. $(document).ready(function(){
  2. //funkcja ktora chcesz uruchomic
  3.  
  4. });
Go to the top of the page
+Quote Post
WebCM
post 29.09.2010, 09:49:48
Post #3





Grupa: Zarejestrowani
Postów: 375
Pomógł: 20
Dołączył: 28.07.2006

Ostrzeżenie: (0%)
-----


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).

Ten post edytował WebCM 29.09.2010, 09:52:13


--------------------
„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

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 Wersja Lo-Fi Aktualny czas: 22.06.2025 - 07:17