在浏览器中获取当前执行的脚本文件名的代码


Posted in Javascript onJuly 19, 2011

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

Javascript 相关文章推荐
javascript hashtable 修正版 下载
Dec 30 Javascript
js中判断Object、Array、Function等引用类型对象是否相等
Aug 29 Javascript
jQuery实现“扫码阅读”功能
Jan 21 Javascript
深入浅析JavaScript中prototype和proto的关系
Nov 15 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
值得学习的bootstrap fileinput文件上传工具
Nov 08 Javascript
JS实现上传图片实时预览功能
May 22 Javascript
vue+node+webpack环境搭建教程
Nov 05 Javascript
vue-router重定向不刷新问题的解决
Jun 25 Javascript
JavaScript实现星级评价效果
May 17 Javascript
JS Generator 函数的含义与用法实例总结
Apr 08 Javascript
vuex实现购物车功能
Jun 28 Javascript
iframe 异步加载技术及性能分析
Jul 19 #Javascript
15款优秀的jQuery导航菜单插件分享
Jul 19 #Javascript
jQuery .tmpl(), .template()学习资料小结
Jul 18 #Javascript
JS仿flash上传头像效果实现代码
Jul 18 #Javascript
js中的string.format函数代码
Aug 11 #Javascript
关于html+ashx开发中几个问题的解决方法
Jul 18 #Javascript
TreeView 用法(有代码)(asp.net)
Jul 15 #Javascript
You might like
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
Yii的CDbCriteria查询条件用法实例
2014/12/04 PHP
php计算2个日期的差值函数分享
2015/02/02 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
How to Auto Include a Javascript File
2007/02/02 Javascript
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
javascript制作2048游戏
2015/03/30 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
vue元素实现动画过渡效果
2017/07/01 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
vant自定义二级菜单操作
2020/11/02 Javascript
[01:31]完美与DOTA2历程
2014/07/31 DOTA
Python记录详细调用堆栈日志的方法
2015/05/05 Python
Python自定义进程池实例分析【生产者、消费者模型问题】
2016/09/19 Python
详解python的数字类型变量与其方法
2016/11/20 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
英国标准协会商店:BSI Shop
2019/02/25 全球购物
德国自然时尚和有机产品购物网站:Waschbär
2019/05/29 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
保险公司早会主持词
2014/03/22 职场文书
个人借款协议书范本
2014/11/17 职场文书
教师岗位职责
2015/02/03 职场文书
《给予树》教学反思
2016/03/03 职场文书
pytorch中Schedule与warmup_steps的用法说明
2021/05/24 Python
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技
Nginx 匹配方式
2022/05/15 Servers