首页 > javascript如何获取当前脚本资源的地址

javascript如何获取当前脚本资源的地址

注意,不是当前页面的地址window.location.href,而是脚本资源的地址,比如我在html里引用了这个页面

<script src="http://example.com/script.js?param=123456"></script>

那么如何在这个js里面获取本身的实际调用地址http://example.com/script.js?param=123456呢?


貌似没有直接的方法,如果你能保证 script.js 的名称是不变的话,也就是可以和页面中其他js区分开,可以使用

var scriptDoms = document.getElementsByTagName("script");

然后遍历根据src属性分析出当前的url

如果不行,那就给script标签添加一个id,然后getElementById取出元素然后读取元素的 .src属性..

另外,貌似 firefox4 支持下面语法

document.currentScript.src;

可以这样获取,因为当前执行的script肯定是当前已加载的所有script中的最后一个。

var scripts=document.getElementsByTagName('script');
var lastUrl=scripts[scripts.length-1].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;
};
【热门文章】
【热门文章】