views:

175

answers:

2

Hello,

I have a javascript file that I reference in HTML with standard <script src="foo.js?param"></script>. In the file I want to distinguish e.g. loading the file with foo.js from foo.js?auto and foo.js?noauto=true, but not if the file is renamed to bar.js and referenced with the same parameter. How can I accomplish this, preferably not using any framework?

+1  A: 

If you want to do it reliably, then you need to provide different JS for each URL. You could generate it with a server side script.

If you want to do it in pure JS, then you can getElementsByTagName('script') and assume that last script is the one that matched (it might not be, e.g. if script elements are being added using DOM after the page has loaded).

David Dorward
Good idea, but I guess I should warn users not to change the name of the included file or call some method in case of explicit execution on load of body.
Residuum
+2  A: 

Take a look a scriptaculous' approach:

var js = /scriptaculous\.js(\?.*)?$/;
$$('head 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') });
});

I think it runs through all script elements and finds the reference to itself, and then parses that URL.

Gipsy King