Skip to content

Instantly share code, notes, and snippets.

@ambar
Created July 18, 2011 06:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ambar/1088730 to your computer and use it in GitHub Desktop.
Save ambar/1088730 to your computer and use it in GitHub Desktop.
如何在浏览器中动态插入的 JavaScript 文件中获取当前文件名?
var scripts = document.getElementsByTagName('script');
console.log('a.js',' >>> ',scripts[scripts.length -1].src);
console.log(__filename);
<html>
<head>
<title>demo</title>
</head>
<body>
<!-- <script src="b.js" id="b"></script> -->
<script type="text/javascript">
var globalEval = function(scriptText){
var doc = document,s = doc.createElement('script');
s.appendChild(doc.createTextNode(scriptText));
doc.body.appendChild(s);
}
var _requireScripts = {};
var requireScript = function(src,callback) {
if(typeof callback !== 'function'){
callback = function() {}
}
if(_requireScripts[src]){
callback(_requireScripts[src],src)
return;
}
get(src,function() {
callback(_requireScripts[src] = this.responseText||'',src)
})
}
var get = function(url,callback) {
var xhr = new XMLHttpRequest();
if(typeof callback !== 'function'){
callback = function() {}
}
xhr.onload = callback.bind(xhr);
xhr.open('GET',url);
xhr.send(null);
}
/*var loadScript = function(src,callback) {
var s = document.createElement('script');
if(typeof callback !== 'function'){
callback = function() {}
}
if(s.readyState){
s.onreadystatechange = function() {
if( s.readyState === 'loaded' || s.readystate === 'complete'){
s.onreadystatechange = null
callback();
}
}
}else{
s.onload = callback;
}
s.src = src;
document.body.appendChild(s);
}
loadScript('b.js?param=1')
loadScript('a.js?param=2')
loadScript('b.js?param=3')
loadScript('a.js?param=4')*/
requireScript('a.js?'+Date.now(),function(text,src) {
// console.log('text:',text);
globalEval('(function() { \nvar __filename = "'+ src +'";\n'+ text +'\n;})();');
})
</script>
</body>
</html>
@ambar
Copy link
Author

ambar commented Jul 22, 2011

  • 解法A
loadScript('b.js?param=1')
loadScript('a.js?param=2')
loadScript('b.js?param=3')
loadScript('a.js?param=4')

/* 输出
a.js >>> http://localhost:800/io/a.js?param=4
a.js >>> http://localhost:800/io/a.js?param=4
b.js >>> http://localhost:800/io/a.js?param=4
b.js >>> http://localhost:800/io/a.js?param=4
*/
  • 解法B
// firefox only
try { 
    throw new Error();
}
catch(exception){
    console.log( exception.fileName );
}
  • 应用1

    requireScript('script.coffee',function(text,src) {
        if( isCoffeeScript(src) )
            globalEval( CoffeeScript.compile(text) );
    })

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment