手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >在浏览器中获取当前执行的脚本文件名的代码
在浏览器中获取当前执行的脚本文件名的代码
摘要:背景同事提了一个问题,如何在浏览器中动态插入的JavaScript文件中,获取当前文件名?除了服务器输出一个文件名外,在脚本中获取应该只有下...

背景

同事提了一个问题,如何在浏览器中动态插入的 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')

/* 输出

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:

复制代码 代码如下:

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;})();');

})

浏览器输出:

复制代码 代码如下:

<script>(function() {

var __filename = "a.js?1310971812334";

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

console.log('a.js',' >>> ',scripts[scripts.length -1].src);

console.log(__filename);

;})();</script>

优点:可靠、可缓存、可推迟执行、可扩展。

限制: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

【在浏览器中获取当前执行的脚本文件名的代码】相关文章:

在JS方法中返回多个值的方法汇总

理解javascript定时器中的单线程

如何用JS取得网址中的文件名

JS实现兼容各浏览器解析XML文档数据的方法

获取阴历(农历)和当前日期的js代码

三种AngularJS中获取数据源的方式

JS实现浏览器菜单命令

Jquery跨浏览器文本复制插件Zero Clipboard的使用方法

一些很实用且必用的小脚本代码第1/5页

让插入到 innerHTML 中的 script 跑起来的实现代码

精品推荐
分类导航