I'm trying to do something like a C #include "filename.c"
, or PHP include(dirname(__FILE__)."filename.php")
but in javascript. I know I can do this if I can get the URL a js file was loaded from (e.g. the URL given in the src attribute of the tag). Is there any way for the javascript to know that?
Alternatively, is there any good way to load javascript dynamically from the same domain (without knowing the domain specifically)? For example, lets say we have two identical servers (QA and production) but they clearly have different URL domains. Is there a way to do something like include("myLib.js");
where myLib.js will load from the domain of the file loading it?
Sorry if thats worded a little confusingly.
I just made this little trick :
Work on: Chrome, Firefox, Edge
enjoy !
Refining upon the answers found here I came up with the following:
getCurrentScript.js
getCurrentScriptPath.js
BTW: I'm using CommonJS module format and bundling with webpack.
All browsers except Internet Explorer (any version) have
document.currentScript
, which always works always (no matter how the file was included (async, bookmarklet etc)).If you want to know the full URL of the JS file you're in right now:
Tadaa.
Within the script:
This works because the browser loads and executes scripts in order, so while your script is executing, the document it was included in is sure to have your script element as the last one on the page. This code of course must be 'global' to the script, so save
src
somewhere where you can use it later. Avoid leaking global variables by wrapping it in:I've more recently found a much cleaner approach to this, which can be executed at any time, rather than being forced to do it synchronously when the script loads.
Use stackinfo to get a stacktrace at a current location, and grab the
info.file
name off the top of the stack.I may be misunderstanding your question but it seems you should just be able to use a relative path as long as the production and development servers use the same path structure.