Sorry, I've just realised this doesn't work, because it's not waiting for the script to load. Like Diego said, if you're going to do it this way then fire the callback on the onload event of the script.
On 8 March 2011 12:12, Nick Morgan <[email protected]> wrote: > A really basic fix would be: > > function loadScript(url, callback) { > > var script = document.createElement('script'); > script.src= url + "?r=" + Math.floor(Math.random()*10000); > script.setAttribute("charset", "UTF-8") > document.querySelector('head').appendChild(script); > if (typeof callback == 'function') { > callback(); > } > } > > loadScript("script-1.js", function () { > loadScript("script-2.js", function () { > loadScript("script-3.js") > }); > }); > > (untested but you get the idea) > > On 5 March 2011 17:46, Jarek Foksa <[email protected]> wrote: > >> Let's say that I have four scripts: init.js, script-1.js, script-2.js >> and script-3.js. Only init.js is declared in XHTML file, the other >> three scripts are loaded from init.js. The code for each file is as >> follows: >> >> init.js >> ---------------------------------------------------- >> function loadScript(url) { >> var script = document.createElement('script'); >> script.src= url + "?r=" + Math.floor(Math.random()*10000); >> script.setAttribute("charset", "UTF-8") >> document.querySelector('head').appendChild(script); >> } >> loadScript("script-1.js"); >> loadScript("script-2.js"); >> loadScript("script-3.js"); >> >> script-1.js: >> ---------------------------------------------------- >> console.log("Executing script-1.js"); >> >> script-2.js >> ---------------------------------------------------- >> console.log("Executing script-2.js"); >> >> script-3.js >> ---------------------------------------------------- >> console.log("Executing script-3.js"); >> >> >> I'm always getting correct results in Google Chrome, Firefox and Opera: >> > Executing script-1.js >> > Executing script-2.js >> > Executing script-3.js >> >> But for some reason the scripts are loaded in random order by Safari: >> > Executing script-3.js >> > Executing script-1.js >> > Executing script-2.js >> >> It looks like loadScript() function runs asynchronously in Safari and >> synchronously in all other browsers. Why? Do you know a more reliable >> way for dynamically loading script files? So far I have stumbled upon >> RequireJS library, though it seems to be an overkill for my tiny >> projects. >> >> -- >> To view archived discussions from the original JSMentors Mailman list: >> http://www.mail-archive.com/[email protected]/ >> >> To search via a non-Google archive, visit here: >> http://www.mail-archive.com/[email protected]/ >> >> To unsubscribe from this group, send email to >> [email protected] >> > > > > -- > Nick Morgan > http://skilldrick.co.uk > @skilldrick <http://twitter.com/skilldrick> > > -- Nick Morgan http://skilldrick.co.uk @skilldrick <http://twitter.com/skilldrick> -- To view archived discussions from the original JSMentors Mailman list: http://www.mail-archive.com/[email protected]/ To search via a non-Google archive, visit here: http://www.mail-archive.com/[email protected]/ To unsubscribe from this group, send email to [email protected]
