同事提了一个问题,如何在浏览器中动态插入的 Javascript 文件中,获取当前文件名?
除了服务器输出一个文件名外,在脚本中获取应该只有下面三种做法。
解法A
普遍的解法,只能用于页面静态scripts标签引入或者单个动态加载。
复制代码 代码如下:
var scripts = document.getElementsByTagName('script');
var filename = scripts[scripts.length -1].src;
动态插入多个脚本标签的情况:
复制代码 代码如下:
loadscript('b.js?param=1')
loadscript('a.js?param=2')
loadscript('b.js?param=3')
loadscript('a.js?param=4')
解法B
变态型,只能工作于FireFox:
复制代码 代码如下:
try {
throw new Error();
}
catch(exception){
console.log( exception.fileName );
}
解法C
我的解法,操作源代码:
复制代码 代码如下:
requirescript('a.js?'+Date.now(),function(text,src) {
console.log('text:',text);
globaleval('(function() { nvar __filename = "'+ src +'";n'+ text +'n;})();');
})
浏览器输出:
复制代码 代码如下:
优点:可靠、可缓存、可推迟执行、可扩展。
限制:1)变量命名被约定为“__filename”;2)同源策略。
又想到这个加载策略用来加载流行的 Coffeescript,比如:
复制代码 代码如下:
requirescript('script.coffee',function(text,src) {
if( isCoffeescript(src) )
globaleval( Coffeescript.compile(text) );
})
Cross-Origin Resource Sharing
Passing Javascript arguments via the src attribute
Coffeescript
查看或下载https://gist.github.com/1088730



