Go Back   CodingForums.com > :: Client side development > JavaScript programming > Post a JavaScript

Before you post, read our: Rules & Posting Guidelines

Reply
 
Thread Tools Rate Thread
Enjoy an ad free experience by logging in. Not a member yet? Register.
Old 11-06-2012, 06:23 AM   PM User | #1
rnd me
Senior Coder

 
rnd me's Avatar
 
Join Date: Jun 2007
Location: Urbana
Posts: 3,468
Thanks: 9
Thanked 466 Times in 450 Posts
rnd me is a jewel in the roughrnd me is a jewel in the roughrnd me is a jewel in the rough
get external script url from within

once upon a time, we were able to determine the url of our scripts with a small snip:
Code:
[].slice.call(document.getElementsByTagName("script"), -1)[0].src
The ability is great for debugging, tracking versions, machine-building documentation, auditing <html manifest=, pre-fetching your code to localStorage via ajax, making more meaningful log entries, building dependency pyramids for modules, a poor man's domain enforcer, and many other practical uses.



once document.createElement("script") - based loaders entered the picture, that capability became unreliable.

you could iterate all the script tags and try to match up your src, but if the files get renamed, the code breaks, causing maintenance headaches.


i figured out a neat way to use the error object to infer the executing script's URL.

While it doesn't work in past versions of IE, it DOES work on mobile, FF, Chrome, and IE 10, so it should be great going forward and in the mobile/tablet space today.

unlike guessing and checking urls, this method requires no per-edit or per-file customization.

Note that it returns the name of the file that contains the __filename() function, not the name of the file that calls it.

This makes it especially nice for checking-in modules, since you can simply attach it as a method to exports, or whatever your module's namespace happens to be. You might just want to run it once and save the string URL as a property on the module, a constructor, or something else, it's super-simple to use in many ways.



Code:
function __filename(){
   try{self.s0m3741ng()}catch(y){
	return "http://" + 
	 String(y.fileName || y.file || y.stack || y + '')
	 .split(/:\d+:\d+/)[0].split("http://")[1];
    } 
}//end __filename()


// example usage: alert(  __filename()    );


The function returns "http://undefined" if pasted into a firebug/inspector console (for reasons i hope are obvious to you) but i made a simple online demo if you want to "kick the tires".
__________________
my site (updated 5/13)
STATS (2013/5) HTML5:90.2% MOB:14% IE7:0.5% IE8:8.6% IE9:9.8% IE10:10%

Last edited by rnd me; 11-06-2012 at 06:25 AM..
rnd me is offline   Reply With Quote
Reply

Bookmarks

Jump To Top of Thread


Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off

Forum Jump


All times are GMT +1. The time now is 12:59 PM.


Advertisement
Log in to turn off these ads.