注意,不是当前页面的地址window.location.href
,而是脚本资源的地址,比如我在html里引用了这个页面
<script src="http://example.com/script.js?param=123456"></script>
那么如何在这个js里面获取本身的实际调用地址http://example.com/script.js?param=123456
呢?
可以这样获取,因为当前执行的script肯定是当前已加载的所有script中的最后一个。
var scripts=document.getElementsByTagName('script');
var lastUrl=scripts[scripts.length-1].src;
貌似没有直接的方法,如果你能保证 script.js 的名称是不变的话,也就是可以和页面中其他js区分开,可以使用
var scriptDoms = document.getElementsByTagName("script");
然后遍历根据src属性分析出当前的url
如果不行,那就给script标签添加一个id,然后getElementById取出元素然后读取元素的 .src属性..
另外,貌似 firefox4 支持下面语法
document.currentScript.src;
@airyland 的回复如果有js是异步加载的话会有问题,其实可以尝试使用下面的代码
function getCurrentScript() {
if (document.currentScript) {
return document.currentScript;
}
// For IE6-9 browsers, the script onload event may not fire right
// after the script is evaluated. Kris Zyp found that it
// could query the script nodes and the one that is in "interactive"
// mode indicates the current script
// ref: http://goo.gl/JHfFW
var scripts = document.getElementsByTagName("script")
for (var i = scripts.length - 1; i >= 0; i--) {
var script = scripts[i]
if (script.readyState === "interactive") {
interactiveScript = script
return interactiveScript
}
}
}
示例:http://binbinliao.com/demo/curjs/index.html
确实,如果你能保证脚本名称不变的话,只能遍历所有脚本去找,有篇文章可以参考:http://www.ithr.org.cn/blogs/blog1.ph…
我贴其中的代码:
var scriptPath = function () {
var scripts = document.getElementsByTagName('SCRIPT');
var path = '';
if(scripts && scripts.length>0) {
for(var i in scripts) {
if(scripts[i].src && scripts[i].src.match(/script\.js$/)) {
path = scripts[i].src.replace(/(.*)script\.js$/, '$1');
}
}
}
return path;
};
正文完