The problem here is that Firefox (I tested 1.0.1) does not wait until the external file is completely loaded, it does that in some parallel thread it seems.
Magyarul, tök jó, hogy így betölti, de ugye ez akkor lenne nagyon finomság, ha csak akkor töltök be vmit, ha tényleg szükség van rá és és rögtön utána tudom használni a betöltött rutint.
Valahogy így:
includeJs("foobar.js"); // ebben van egy foobar függvény foobar('foobar');
De mint a fenti oldalon is írja a srác, ez firefox alatt nem működik, a foobar függvény még nem létezik. Próbálkoztam már mindenféle delay-jel, de akkor meg azt kaptam, hogy ez a script lelassítja a böngészőt, meg kívánom-e szakítani... :( Van erre ötlet? Nem találtam semmit... :(
Hát ki lehet várni, hogy az includeJs() csak akkor térjen vissza, ha megvan a teljes szkript. A kiterjesztett PHP CHM doksi megoldásban azt csináltuk, hogy a betöltött JS visszahív egy függvényt a kódja végén, azaz az akkor hívódik meg, ha betöltődik. Az includeJs() is figyelhet egy tömböt, amiben mondjuk a betöltött szkript beállít egy értéket, és akkor figyelhető, hogy mikor töltődött be.
Jónak tűnnek az ötletek, nekem is eszembe jutottak, csak nem túl elegáns szerintem... :) Saját kódoknál még igen, csak akkor csúnya, ha mondjuk valami külső csomagról van szó, mondjuk egy wysiwyg editor vagy ilyesmi. Ebbe belenyúlni, hogy állítgasson értéket... Hát... :(
function loadExternalJS(url) {
var node=document.createElement("script");
node.setAttribute("type", "text/javascript");
node.setAttribute("loaded", false);
node.setAttribute("src", url);
node.setAttribute("id", url);
node.onload=function () {
this.setAttribute("loaded", true);
}
document.getElementsByTagName("head")[0].appendChild(node);
while (document.getElementById(url).getAttribute("loaded")!=true) {
var i=i+1;
}
}
Ennél jobb ötletem nem volt, de ez meg a már említett "slow run"-nal elszáll a while miatt. :(
Ezzel egy bajom van csak...
http://cain.supersized.org/archives/2-Dynamic-loading-of-external-JavaScript-.js-files.html
Magyarul, tök jó, hogy így betölti, de ugye ez akkor lenne nagyon finomság, ha csak akkor töltök be vmit, ha tényleg szükség van rá és és rögtön utána tudom használni a betöltött rutint.
Valahogy így:
foobar('foobar');
De mint a fenti oldalon is írja a srác, ez firefox alatt nem működik, a foobar függvény még nem létezik. Próbálkoztam már mindenféle delay-jel, de akkor meg azt kaptam, hogy ez a script lelassítja a böngészőt, meg kívánom-e szakítani... :( Van erre ötlet? Nem találtam semmit... :(
callback
ha saját...