如何获取javascript文件的位置(src)?

如何获取javascript文件的位置(src)?,javascript,Javascript,javascript文件如何知道它位于何处?例如: <script type="text/javascript" src="http://mysite.com/scripts/howdy.js"></script> var scripts = document.getElementsByTagName('script'), len = scripts.length, re = /howdy\.js$/, src, howdyScriptSrc;

javascript文件如何知道它位于何处?例如:

<script type="text/javascript" src="http://mysite.com/scripts/howdy.js"></script>
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;
  }
}
​

howdy.js
中的代码如何知道
http://mysite.com/scripts/howdy.js

编辑:澄清。我不能依靠在DOM中搜索脚本标记,因为我需要在DOM准备就绪之前了解它。

尝试:

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];

给这个脚本标记一个id,然后写:

var src = document.getElementById('scriptID').attributes['src'];

在执行当前脚本的时刻,将是DOM中的最后一个
script
元素,因此您可以通过以下方式获得它:

var scripts = document.getElementsByTagName('script'),
    currentScriptSrc = scripts[scripts.length-1].src;
检查这个加载这个

编辑:考虑到@kangax关于
async
defer
属性的评论,IMO之前知道文件名的唯一安全方法是检查页面上的
script
元素,检查其
src
属性,一些库喜欢使用这种技术,例如:

<script type="text/javascript" src="http://mysite.com/scripts/howdy.js"></script>
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;
  }
}
​
试试这个:

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');
函数getScriptSourceName(名称){ var scripts=document.getElementsByTagName('script'); 对于(i=0;i-1) 返回脚本[i].src; } } getScriptSourceName('howdy.js');
我很好奇,你为什么需要这些信息?可能是@tenfour的副本-howdy.js可能会从同一目录中引入其他脚本,我无法确定howdy.js将托管在哪里(测试、生产、qa、客户端主机等)。这并不可怕,但却是一项业务需求@马塞尔-是的,你是对的,这是个骗局。但我还是不说了,因为我无法用我使用的搜索词找到答案。酷,我不知道你得到了这个信息的保证。但在我尝试过的每个浏览器上,它似乎都是一致的。谢谢想想Kangax的评论,让我在这里:“扎克利特:谢谢!”是的,我完全忘记了延迟和异步属性。