在JavaScript中寻找自身来源

5

有没有办法找到当前正在运行的脚本的来源? 我想根据脚本加载的位置添加不同的行为。

例如,它是从以下位置加载的:

http://localhost:8080/js/myscript.js 

vs

http://www.myhost.com/js/myscript.js

我不是负责加载的人,因此无法在加载时间添加一些信息。脚本是使用$.getScript()动态加载的,因此我无法寻找该元素。


自从您调用$.getScript(),您已经拥有了那些信息。只需将url分配给一个参数,而不是直接输入url,然后检查该参数以查找脚本的来源。 - Jake Aitchison
看我的答案,应该能行。 - Jake Aitchison
@StefanNeubert,那正是我在寻找的API。 - Guy Korland
3个回答

6
当一个脚本被调用时,除非标记为deferasync,否则它总是当前页面上的最后一个元素(因为它是阻止渲染的)。通过这一点,你可以进行以下操作:
var scripts = document.getElementsByTagName('script'),
    mylocation = scripts[scripts.length-1].getAttribute("src");

那么您可以根据需要随意处理。

1
这也适用于JQuery getScript()吗? - Guy Korland
我不知道。可能是,但我真的不确定。 - Niet the Dark Absol

2

嗯,这有点像黑客行为..!

首先,您需要获取所有脚本元素。

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

选择当前脚本。
var current_script = all_scripts[all_scripts.length-1];

现在您可以看到脚本的src。
alert(current_script.src);

1
我猜它类似于@Kolink的答案,但它能在JQuery.getScript()中起作用吗? - Guy Korland

-3

更新 根据@FelixKling的建议,删除了var o = $(this)

更新示例

$.getScript("http://localhost:8080/js/myscript.js")
    .done(function(data, textStatus, jqxhr) {

        // this.url is the script url passed to $.getScript
        if(this.url.search('http://localhost:8080') != -1){
            alert("do one thing for http://localhost:8080/js/myscript.js");
        }
        if(this.url.search('http://www.myhost.com') != -1){
            alert("do another thing for http://www.myhost.com/js/myscript.js");
        }
    })
    .fail(function(){
        alert("somethign went wrong");
    });

在 jsFiddle 上的示例


如果您不将this传递给jQuery,则可以避免键入o [0]var o = this;或者在任何地方都使用this.urlthis指的是jqXHR,它既不是DOM元素也不是HTML字符串,因此没有理由将其传递给jQuery($)。 - Felix Kling
@milkshake 我不确定这与问题有什么关系... - Guy Korland
@milkshake 但我的代码在"http://jsfiddle.net/js/Actions.js"而不是加载函数中。 - Guy Korland
@milkshake 抱歉,我想我被误解了,我不控制加载脚本的代码,我正在开发一个被许多人使用并由他们加载的库/脚本。我想知道在代码中(库代码)它是从哪里加载的。 - Guy Korland
@GuyKorland 你有检查过新的答案吗? - Jake Aitchison
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接