javascript文件如何知道它位于何处?例如:
<script type="text/javascript" src="http://mysite.com/scripts/howdy.js"></script>
howdy.js
中的代码如何了解http://mysite.com/scripts/howdy.js
?
编辑:澄清。我不能依赖于在DOM中搜索我的脚本标记,因为我需要在DOM准备好之前了解它。
答案 0 :(得分:13)
在当前脚本执行的那一刻,它将成为DOM中的最后一个script
元素,因此您可以通过以下方式获取它:
var scripts = document.getElementsByTagName('script'),
currentScriptSrc = scripts[scripts.length-1].src;
编辑:考虑到@kangax的评论,关于async
和defer
属性,IMO以前知道文件名的唯一安全方式是检查页面上的script
元素,检查其src
属性,某些库如Scriptaculous.us使用此技术,例如:
var scripts = document.getElementsByTagName('script'),
len = scripts.length,
re = /howdy\.js$/,
src, howdyScriptSrc;
while (len--) {
src = scripts[len].src;
if (src && src.match(re)) {
howdyScriptSrc = src;
break;
}
}
答案 1 :(得分:1)
给这个脚本标记一个id,然后写:
var src = document.getElementById('scriptID').attributes['src'];
答案 2 :(得分:1)
试试这个:
function getScriptSourceName(name){
var scripts = document.getElementsByTagName('script');
for (i=0;i<scripts.length;i++){
if (scripts[i].src.indexOf(name) > -1)
return scripts[i].src;
}
}
getScriptSourceName('howdy.js');
答案 3 :(得分:0)
尝试:
document.scripts[document.scripts.length-1]; // add .src to get href
//or
document.getElementsByTagName("script")[document.getElementsByTagName("script").length-1];
//for (maybe) better compatibility
哪个获取DOM中的最后一个脚本。如果您的脚本在加载时正在执行,则会返回正确的元素。
将其保存到变量中,以便稍后使用的函数中使用。
var thisScript = document.scripts[document.scripts.length-1];