🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.javascript
14 messages
14 total messages Started by Peter May Wed, 06 Jan 2010 09:30
Dynamiczne dodawanie ładowanie skryptów
#49648
Author: Peter May
Date: Wed, 06 Jan 2010 09:30
30 lines
2147 bytes
Chcę dynamicznie ładować JavaScript używając kodu inline w <head> i 
robię to w dość, wydaje się, podstawowy sposób:

(function(){
  var e = document.createElement("script");
  e.type = "text/javascript";
  e.src = "kod.js";
  e.setAttribute("async","async");
  var head = document.documentElement.firstChild;
  while( head && head.nodeType != 1 )
  {
   head = head.nextSibling;
  }
  head.appendChild(e);
})();

Problem w tym, że takie ładowanie niby powinno działać wszędzie dobrze, 
ale tak nie jest. IE 6,7,8 i Safari 4 przy pierwszym ładowaniu strony 
nie ładuje skryptu. Potem już tak. W ogóle czasem bez jakiegoś powodu po 
prostu skrypt nie ładuje się lub ładuje się (np. z bufora przeglądarki), 
ale nie "odpali się". Nie testowałem na innych przeglądarkach, ale czy 
to się da usprawnić jakoś? Ma ktoś doświadczenie w temacie dynamicznego 
ładowania skryptów?

Przy okazji: tę pętlę while dodałem, bo okazało się, że IE w zmiennej 
head podaje mi node typu text pomimo, że ja nie mam tam żadnego tekstu, 
nawet white space itp.

-- 
Peter
Re: Dynamiczne dodawanie ładowanie skryptów
#49649
Author: Mariusz Chwalba
Date: Wed, 06 Jan 2010 10:28
17 lines
1528 bytes
On Wed, 06 Jan 2010 10:30:41 +0100, Peter May <peter.may@poczta.fm> wrote:

[...]
> Problem w tym, że takie ładowanie niby powinno działać wszędzie dobrze,  
> ale tak nie jest. IE 6,7,8 i Safari 4 przy pierwszym ładowaniu strony  
> nie ładuje skryptu. Potem już tak. W ogóle czasem bez jakiegoś powodu po  
> prostu skrypt nie ładuje się lub ładuje się (np. z bufora przeglądarki),  
> ale nie "odpali się". Nie testowałem na innych przeglądarkach, ale czy  
> to się da usprawnić jakoś? Ma ktoś doświadczenie w temacie dynamicznego  
> ładowania skryptów?

Może po prostu XMLHttpRequest i eval? Na pewno będzie wygodniejsze w
debugowaniu, no i masz kontrolę nad momentem ładowania/wykonywania.

pozdrawiam,
-- 
Mariusz 'koder' Chwalba
Re: Dynamiczne dodawanie ładowanie skryptów
#49652
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 10:34
26 lines
1545 bytes
Dnia Wed, 06 Jan 2010 10:30:41 +0100, Peter May napisał(a):

> Chcę dynamicznie ładować JavaScript używając kodu inline w <head> i 
> robię to w dość, wydaje się, podstawowy sposób:
> 
> (function(){
>   var e = document.createElement("script");
>   e.type = "text/javascript";
>   e.src = "kod.js";
>   e.setAttribute("async","async");
>   var head = document.documentElement.firstChild;
>   while( head && head.nodeType != 1 )
>   {
>    head = head.nextSibling;
>   }
>   head.appendChild(e);
> })();
działa od ie6
document.getElementsByTagName("head")[0].appendChild(e)
poza tym używam zwykle do tego:
e.setAttribute()

-- 
Krzysztof Warunek

  http://tocheckserver.pl
Re: Dynamiczne dodawanie ładowanie skryptów
#49650
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 10:40
23 lines
1860 bytes
Dnia Wed, 06 Jan 2010 11:28:27 +0100, Mariusz Chwalba napisał(a):

> On Wed, 06 Jan 2010 10:30:41 +0100, Peter May <peter.may@poczta.fm> wrote:
> 
> [...]
>> Problem w tym, że takie ładowanie niby powinno działać wszędzie dobrze,  
>> ale tak nie jest. IE 6,7,8 i Safari 4 przy pierwszym ładowaniu strony  
>> nie ładuje skryptu. Potem już tak. W ogóle czasem bez jakiegoś powodu po  
>> prostu skrypt nie ładuje się lub ładuje się (np. z bufora przeglądarki),  
>> ale nie "odpali się". Nie testowałem na innych przeglądarkach, ale czy  
>> to się da usprawnić jakoś? Ma ktoś doświadczenie w temacie dynamicznego  
>> ładowania skryptów?
> 
> Może po prostu XMLHttpRequest i eval? Na pewno będzie wygodniejsze w
> debugowaniu, no i masz kontrolę nad momentem ładowania/wykonywania.
moment gotowości/ładowania mozna i bez tego uchwycić, ale co racja to racja
http://unixpapa.com/js/dyna.html


-- 
Krzysztof Warunek

  http://tocheckserver.pl
Re: Dynamiczne dodawanie ładowanie skryptów
#49653
Author: Peter May
Date: Wed, 06 Jan 2010 11:32
34 lines
2449 bytes
W dniu 2010-01-06 11:34, Krzysztof Warunek pisze:
> Dnia Wed, 06 Jan 2010 10:30:41 +0100, Peter May napisał(a):
>
>> Chcę dynamicznie ładować JavaScript używając kodu inline w<head>  i
>> robię to w dość, wydaje się, podstawowy sposób:
>>
>> (function(){
>>    var e = document.createElement("script");
>>    e.type = "text/javascript";
>>    e.src = "kod.js";
>>    e.setAttribute("async","async");
>>    var head = document.documentElement.firstChild;
>>    while( head&&  head.nodeType != 1 )
>>    {
>>     head = head.nextSibling;
>>    }
>>    head.appendChild(e);
>> })();
> działa od ie6

Owszem. Nie napisałem, że wcale nie działa, ile zachowuje się co 
najmniej dziwnie. Może inna sprawa, że plik jest z roszerzeniem php i 
wysyłany z nagłówkiem text/javascript, ale nie wiem, czy to ma znaczenie.

> document.getElementsByTagName("head")[0].appendChild(e)
> poza tym używam zwykle do tego:
> e.setAttribute()

To akurat nie ma wpływu czy ustawiam atrybut bezpośrednio .src czy 
setAttribute("src", "..."); A przynajmniej ja nie widzę różnicy. Poza 
niektórymi niuansami z class i IE.

-- 
Peter
Re: Dynamiczne dodawanie ładowanie skryptów
#49651
Author: Peter May
Date: Wed, 06 Jan 2010 12:32
25 lines
2373 bytes
W dniu 2010-01-06 11:40, Krzysztof Warunek pisze:
> Dnia Wed, 06 Jan 2010 11:28:27 +0100, Mariusz Chwalba napisał(a):
>
>> On Wed, 06 Jan 2010 10:30:41 +0100, Peter May<peter.may@poczta.fm>  wrote:
>>
>> [...]
>>> Problem w tym, że takie ładowanie niby powinno działać wszędzie dobrze,
>>> ale tak nie jest. IE 6,7,8 i Safari 4 przy pierwszym ładowaniu strony
>>> nie ładuje skryptu. Potem już tak. W ogóle czasem bez jakiegoś powodu po
>>> prostu skrypt nie ładuje się lub ładuje się (np. z bufora przeglądarki),
>>> ale nie "odpali się". Nie testowałem na innych przeglądarkach, ale czy
>>> to się da usprawnić jakoś? Ma ktoś doświadczenie w temacie dynamicznego
>>> ładowania skryptów?
>>
>> Może po prostu XMLHttpRequest i eval? Na pewno będzie wygodniejsze w
>> debugowaniu, no i masz kontrolę nad momentem ładowania/wykonywania.
> moment gotowości/ładowania mozna i bez tego uchwycić, ale co racja to racja
> http://unixpapa.com/js/dyna.html

Śledzenie momentu załadowania pliku jest istotne wtedy, kiedy chcemy po 
nim załadować następny. W moim przypadku nie ma to znaczenia, ponieważ 
ładuję tylko jeden plik.

-- 
Peter
Re: Dynamiczne dodawanie ładowanie skryptów
#49654
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 13:11
19 lines
1684 bytes
Dnia Wed, 06 Jan 2010 12:32:56 +0100, Peter May napisał(a):
> Owszem. Nie napisałem, że wcale nie działa, ile zachowuje się co 
> najmniej dziwnie. Może inna sprawa, że plik jest z roszerzeniem php i 
> wysyłany z nagłówkiem text/javascript, ale nie wiem, czy to ma znaczenie.
twój kod poza zbędną pętlą, wygląda przyjemnienie, no może jeszcze async
(ale nie powinno być problemów)

problem może leżeć kontekście w jakim to wykorzystujesz.

> To akurat nie ma wpływu czy ustawiam atrybut bezpośrednio .src czy 
> setAttribute("src", "..."); A przynajmniej ja nie widzę różnicy. Poza 
> niektórymi niuansami z class i IE.
widzisz :) skoro używasz jednego i drugiego


-- 
Krzysztof Warunek

  http://tocheckserver.pl
Re: Dynamiczne dodawanie ładowanie skryptów
#49655
Author: Peter May
Date: Wed, 06 Jan 2010 14:43
25 lines
2407 bytes
W dniu 2010-01-06 14:11, Krzysztof Warunek pisze:
> Dnia Wed, 06 Jan 2010 12:32:56 +0100, Peter May napisał(a):
>> Owszem. Nie napisałem, że wcale nie działa, ile zachowuje się co
>> najmniej dziwnie. Może inna sprawa, że plik jest z roszerzeniem php i
>> wysyłany z nagłówkiem text/javascript, ale nie wiem, czy to ma znaczenie.
> twój kod poza zbędną pętlą, wygląda przyjemnienie, no może jeszcze async
> (ale nie powinno być problemów)
>
> problem może leżeć kontekście w jakim to wykorzystujesz.

Możesz rozwinąć tę myśl?

>> To akurat nie ma wpływu czy ustawiam atrybut bezpośrednio .src czy
>> setAttribute("src", "..."); A przynajmniej ja nie widzę różnicy. Poza
>> niektórymi niuansami z class i IE.
> widzisz :) skoro używasz jednego i drugiego

Tu akurat przypadek ;-) Generalnie czy to będę ustawiał przez 
setAttribute czy też bezpośrednio nie ma w tym przypadku znaczenia. A 
przynajmniej nie powinno mieć. Poza IE w niektórych przypadkach, np.:

http://www.quirksmode.org/bugreports/archives/2005/03/setAttribute_does_not_work_in_IE_when_used_with_th.html

-- 
Peter
Re: Dynamiczne dodawanie ładowanie skryptów
#49656
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 15:00
23 lines
1885 bytes
Dnia Wed, 06 Jan 2010 15:43:35 +0100, Peter May napisał(a):

> W dniu 2010-01-06 14:11, Krzysztof Warunek pisze:
>> Dnia Wed, 06 Jan 2010 12:32:56 +0100, Peter May napisał(a):
>>> Owszem. Nie napisałem, że wcale nie działa, ile zachowuje się co
>>> najmniej dziwnie. Może inna sprawa, że plik jest z roszerzeniem php i
>>> wysyłany z nagłówkiem text/javascript, ale nie wiem, czy to ma znaczenie.
>> twój kod poza zbędną pętlą, wygląda przyjemnienie, no może jeszcze async
>> (ale nie powinno być problemów)
>>
>> problem może leżeć kontekście w jakim to wykorzystujesz.
> 
> Możesz rozwinąć tę myśl?
jak używasz tego? w eventcie, może jakiś błąd w
listenerze... błąd w warunku... itp

kombinuje w tą stronę, bo sam kod jest imo ok.


-- 
Krzysztof Warunek

  http://tocheckserver.pl
Re: Dynamiczne dodawanie ładowanie skryptów
#49657
Author: Peter May
Date: Wed, 06 Jan 2010 16:48
38 lines
2801 bytes
W dniu 2010-01-06 16:00, Krzysztof Warunek pisze:
> Dnia Wed, 06 Jan 2010 15:43:35 +0100, Peter May napisał(a):
>
>> W dniu 2010-01-06 14:11, Krzysztof Warunek pisze:
>>> Dnia Wed, 06 Jan 2010 12:32:56 +0100, Peter May napisał(a):
>>>> Owszem. Nie napisałem, że wcale nie działa, ile zachowuje się co
>>>> najmniej dziwnie. Może inna sprawa, że plik jest z roszerzeniem php i
>>>> wysyłany z nagłówkiem text/javascript, ale nie wiem, czy to ma znaczenie.
>>> twój kod poza zbędną pętlą, wygląda przyjemnienie, no może jeszcze async
>>> (ale nie powinno być problemów)
>>>
>>> problem może leżeć kontekście w jakim to wykorzystujesz.
>>
>> Możesz rozwinąć tę myśl?
> jak używasz tego? w eventcie, może jakiś błąd w
> listenerze... błąd w warunku... itp

Kod sam w sobie to masa różnych funkcji, które wywoływane są po 
załadowaniu dokumentu. Wydaje mi się, że kod nie zawiera błędów, bo 
inaczej w ogóle by nie działał.

Jedyną rzeczą, którą mógłbym podejrzewać, to jQuery-owy:

$(document).ready(function ()
{
...
});

W ogóle to bardzo mało używam jQuery. Raczej wszystko mam samemu 
napisane, ale to chyba bez znaczenia.

> kombinuje w tą stronę, bo sam kod jest imo ok.

No sam kod załadowania tak, ale może problem jest z lokalnym cache 
przeglądarki? Hm...

-- 
Peter
Re: Dynamiczne dodawanie ładowanie skryptów
#49658
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 20:44
21 lines
1694 bytes
Dnia Wed, 06 Jan 2010 17:48:30 +0100, Peter May napisał(a):

> W ogóle to bardzo mało używam jQuery. Raczej wszystko mam samemu 
> napisane, ale to chyba bez znaczenia.
to może użyć
http://docs.jquery.com/Ajax/jQuery.getScript


> No sam kod załadowania tak, ale może problem jest z lokalnym cache 
> przeglądarki? Hm...
no to Virtual PC i ie6/7/8test... sprawdź

tak przez przypadek trafiłem - safari kiedys miał problemy
z takim kodem
http://groups.google.com/group/jquery-en/browse_thread/thread/d0a0c268f5d67e5b?pli=1


-- 
Krzysztof Warunek

  http://tocheckserver.pl
Re: Dynamiczne dodawanie ładowanie skryptów
#49659
Author: Peter May
Date: Thu, 07 Jan 2010 11:04
25 lines
2183 bytes
W dniu 2010-01-06 21:44, Krzysztof Warunek pisze:
> Dnia Wed, 06 Jan 2010 17:48:30 +0100, Peter May napisał(a):
>
>> W ogóle to bardzo mało używam jQuery. Raczej wszystko mam samemu
>> napisane, ale to chyba bez znaczenia.
> to może użyć
> http://docs.jquery.com/Ajax/jQuery.getScript

Nie chcę wgrywać jQuery po to, aby wgrać następny skrypt, bo nic tym nie 
zyskam.

>> No sam kod załadowania tak, ale może problem jest z lokalnym cache
>> przeglądarki? Hm...
> no to Virtual PC i ie6/7/8test... sprawdź

Sprawdzę.

> tak przez przypadek trafiłem - safari kiedys miał problemy
> z takim kodem
> http://groups.google.com/group/jquery-en/browse_thread/thread/d0a0c268f5d67e5b?pli=1

Ogólnie to, co powinno być proste, nie jest takie proste ;-)

-- 
Peter
Re: Dynamiczne dodawanie ładowanie skryptów
#49661
Author: Bogdan Larisch
Date: Fri, 08 Jan 2010 22:03
52 lines
3293 bytes
Użytkownik "Peter May" <peter.may@poczta.fm> napisał w wiadomości
news:hi1lcp$ea$1@atlantis.news.neostrada.pl...
> Chcę dynamicznie ładować JavaScript używając kodu inline w <head> i
> robię to w dość, wydaje się, podstawowy sposób:
>
> (function(){
>   var e = document.createElement("script");
>   e.type = "text/javascript";
>   e.src = "kod.js";
>   e.setAttribute("async","async");
>   var head = document.documentElement.firstChild;
>   while( head && head.nodeType != 1 )
>   {
>    head = head.nextSibling;
>   }
>   head.appendChild(e);
> })();
>
> Problem w tym, że takie ładowanie niby powinno działać wszędzie dobrze,
> ale tak nie jest. IE 6,7,8 i Safari 4 przy pierwszym ładowaniu strony
> nie ładuje skryptu. Potem już tak. W ogóle czasem bez jakiegoś powodu po
> prostu skrypt nie ładuje się lub ładuje się (np. z bufora przeglądarki),
> ale nie "odpali się". Nie testowałem na innych przeglądarkach, ale czy
> to się da usprawnić jakoś? Ma ktoś doświadczenie w temacie dynamicznego
> ładowania skryptów?

>Może inna sprawa, że plik jest z roszerzeniem php i
> wysyłany z nagłówkiem text/javascript, ale nie wiem, czy to ma znaczenie.

Miałem kiedyś podobny problem.
Ładowałem skrypty JS przy pomocy php. Objawy były takie same jak u Ciebie:
przy pierwszym ładowaniu nic, a przy następnym wszystko było dobrze.
Zajrzałem do nagłówków HTTP odpowiedzi serwera na żądanie ładowania skryptu.
Serwer zwracał "304 Not Modified", co oczywiście było zgodne z prawdą,
bo skrypt php nie ulegał modyfikacjom. A tego, że miał dostarczać za każdym
razem inny plik,
to już serwer nie wiedział... :-)

Rozwiązanie znalazłem tu:
http://www.fiftyfoureleven.com/weblog/web-development/css/the-definitive-css
-gzip-method

Co prawda artykuł jest na trochę inny temat, ale w pewnym miejscu jest
sugestia aby wysłać nagłówek
  header("Cache-Control: must-revalidate");

i od tej pory wszystko chodzi ja w zegarku.

--
Pozdrawiam
Bogdan Larisch
Re: Dynamiczne dodawanie ładowanie skryptów
#49660
Author: Paweł Piskorz
Date: Sat, 09 Jan 2010 12:08
19 lines
1913 bytes
On 2010-01-07 12:04, Peter May wrote:
> W dniu 2010-01-06 21:44, Krzysztof Warunek pisze:
>> Dnia Wed, 06 Jan 2010 17:48:30 +0100, Peter May napisał(a):
>>
>>> W ogóle to bardzo mało używam jQuery. Raczej wszystko mam samemu
>>> napisane, ale to chyba bez znaczenia.
>> to może użyć
>> http://docs.jquery.com/Ajax/jQuery.getScript
>
> Nie chcę wgrywać jQuery po to, aby wgrać następny skrypt, bo nic tym nie
> zyskam.

Przecież już używasz jQuery:
> Jedyną rzeczą, którą mógłbym podejrzewać, to jQuery-owy:
>
> $(document).ready(function ()
> {
> ...
> });
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads