Vikrant Chaudhary
Vikrant Chaudhary

Reputation: 11289

How to get the uri of the .js file itself

is there a method in JavaScript by which I can find out the path/uri of the executing script.

For example:

  1. index.html includes a JavaScript file stuff.js and since stuff.js file depends on ./commons.js, it wants to include it too in the page. Problem is that stuff.js only knows the relative path of ./commons.js from itself and has no clue of full url/path.

  2. index.html includes stuff.js file as <script src="http://example.net/js/stuff.js?key=value" /> and stuff.js file wants to read the value of key. How to?

UPDATE: Is there any standard method to do this? Even in draft status? (Which I can figure out by answers, that answer is "no". Thanks to all for answering).

Upvotes: 4

Views: 2493

Answers (3)

Sean Patrick Floyd
Sean Patrick Floyd

Reputation: 298898

script.aculo.us (source) solves a similar problem. here is the relevant code

var js = /scriptaculous\.js(\?.*)?$/;
$$('script[src]').findAll(function(s) {
    return s.src.match(js);
}).each(function(s) {
    var path = s.src.replace(js, ''),
    includes = s.src.match(/\?.*load=([a-z,]*)/);
    (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
    function(include) { Scriptaculous.require(path+include+'.js') });
    }); 

(some parts of this like .each require prototype)

Upvotes: 1

Pointy
Pointy

Reputation: 413709

If your script knows that it's called "stuff.js", then it can look at all the script tags in the DOM.

var scripts = document.getElementsByTagName('script');

and then it can look at the "src" attributes for its name. Kind-of a hack, however, and to me it seems like something you should really work out server-side.

Upvotes: 3

Sean Kinsey
Sean Kinsey

Reputation: 38046

This should give you the full path to the current script (might not work if loaded on request etc.)

var scripts = document.getElementsByTagName("script");
var thisScript = scripts[scripts.length-1];
var thisScriptsSrc = thisScript.src;

Upvotes: 5

Related Questions