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
Author: Peter May
Date: Wed, 06 Jan 2010 09:30
Date: Wed, 06 Jan 2010 09:30
30 lines
2147 bytes
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
Author: Mariusz Chwalba
Date: Wed, 06 Jan 2010 10:28
Date: Wed, 06 Jan 2010 10:28
17 lines
1528 bytes
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
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 10:34
Date: Wed, 06 Jan 2010 10:34
26 lines
1545 bytes
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
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 10:40
Date: Wed, 06 Jan 2010 10:40
23 lines
1860 bytes
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
Author: Peter May
Date: Wed, 06 Jan 2010 11:32
Date: Wed, 06 Jan 2010 11:32
34 lines
2449 bytes
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
Author: Peter May
Date: Wed, 06 Jan 2010 12:32
Date: Wed, 06 Jan 2010 12:32
25 lines
2373 bytes
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
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 13:11
Date: Wed, 06 Jan 2010 13:11
19 lines
1684 bytes
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
Author: Peter May
Date: Wed, 06 Jan 2010 14:43
Date: Wed, 06 Jan 2010 14:43
25 lines
2407 bytes
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
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 15:00
Date: Wed, 06 Jan 2010 15:00
23 lines
1885 bytes
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
Author: Peter May
Date: Wed, 06 Jan 2010 16:48
Date: Wed, 06 Jan 2010 16:48
38 lines
2801 bytes
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
Author: Krzysztof Warunek
Date: Wed, 06 Jan 2010 20:44
Date: Wed, 06 Jan 2010 20:44
21 lines
1694 bytes
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
Author: Peter May
Date: Thu, 07 Jan 2010 11:04
Date: Thu, 07 Jan 2010 11:04
25 lines
2183 bytes
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
Author: Bogdan Larisch
Date: Fri, 08 Jan 2010 22:03
Date: Fri, 08 Jan 2010 22:03
52 lines
3293 bytes
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
Author: Paweł Piskorz
Date: Sat, 09 Jan 2010 12:08
Date: Sat, 09 Jan 2010 12:08
19 lines
1913 bytes
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