有没有办法找到当前正在运行的脚本的来源? 我想根据脚本加载的位置添加不同的行为。
例如,它是从以下位置加载的:
http://localhost:8080/js/myscript.js
vs
http://www.myhost.com/js/myscript.js
我不是负责加载的人,因此无法在加载时间添加一些信息。脚本是使用$.getScript()
动态加载的,因此我无法寻找该元素。
有没有办法找到当前正在运行的脚本的来源? 我想根据脚本加载的位置添加不同的行为。
例如,它是从以下位置加载的:
http://localhost:8080/js/myscript.js
vs
http://www.myhost.com/js/myscript.js
我不是负责加载的人,因此无法在加载时间添加一些信息。脚本是使用$.getScript()
动态加载的,因此我无法寻找该元素。
defer
或async
,否则它总是当前页面上的最后一个元素(因为它是阻止渲染的)。通过这一点,你可以进行以下操作:var scripts = document.getElementsByTagName('script'),
mylocation = scripts[scripts.length-1].getAttribute("src");
嗯,这有点像黑客行为..!
首先,您需要获取所有脚本元素。
var all_scripts = document.getElementsByTagName('script');
var current_script = all_scripts[all_scripts.length-1];
alert(current_script.src);
更新
根据@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");
});
this
传递给jQuery,则可以避免键入o [0]
:var o = this;
或者在任何地方都使用this.url
。 this
指的是jqXHR
,它既不是DOM元素也不是HTML字符串,因此没有理由将其传递给jQuery($
)。 - Felix Kling
$.getScript()
,您已经拥有了那些信息。只需将url
分配给一个参数,而不是直接输入url
,然后检查该参数以查找脚本的来源。 - Jake Aitchison