How to detect if javascript files are loaded
How to detect if javascript files are loaded
Is there a event that fires when javascript files are loaded. The problem occured because YSlow recoment to move javascript files in bottom of the page. This means that $(document).ready(function1) is fired before js file that contains code of function1 event is loaded.
How to avoid this kind of situation?
Answer by RaYell for How to detect if javascript files are loaded
Change the loading order of your scripts so that function1
was defined before using it in ready
callback.
Plus I always found it better to define ready
callback as an anonymous method then named one.
Answer by T.J. Crowder for How to detect if javascript files are loaded
I don't have a reference for it handy, but script tags are processed in order, and so if you put your $(document).ready(function1)
in a script tag after the script tags that define function1, etc., you should be good to go.
Of course, another approach would be to ensure that you're using only one script tag, in total, by combining files as part of your build process. (Unless you're loading the other ones from a CDN somewhere.) That will also help improve the perceived speed of your page.
EDIT: Just realized that I didn't actually answer your question: I don't think there's a cross-browser event that's fired, no. There is if you work hard enough, see below. You can test for symbols and use setTimeout to reschedule:
...but you shouldn't have to do that if you get your script tag order correct.
Update: You can get load notifications for script
elements you add to the page dynamically if you like. To get broad browser support, you have to do two different things, but as a combined technique this works:
function loadScript(path, callback) { var done = false; var scr = document.createElement('script'); scr.onload = handleLoad; scr.onreadystatechange = handleReadyStateChange; scr.onerror = handleError; scr.src = path; document.body.appendChild(scr); function handleLoad() { if (!done) { done = true; callback(path, "ok"); } } function handleReadyStateChange() { var state; if (!done) { state = scr.readyState; if (state === "complete") { handleLoad(); } } } function handleError() { if (!done) { done = true; callback(path, "error"); } } }
In my experience, error notification (onerror
) is not 100% cross-browser reliable. Also note that some browsers will do both mechanisms, hence the done
variable to avoid duplicate notifications.
Answer by NickFitz for How to detect if javascript files are loaded
When they say "The bottom of the page" they don't literally mean the bottom: they mean just before the closing