如何在同一JS文件中获取JS文件的URL?

10

可能是重复问题:
什么是我的脚本src URL?

我有一个情况:

<script 
  type="text/javascript" 
  src="http://server/some.js">
</script>

在文件some.js中,我需要知道同一文件some.js的完整路径,例如"http://server/some.js"。我该怎么做?

我不能更改HTML代码(客户端正在包含JS文件)。


请参见https://dev59.com/3XNA5IYBdhLWcg3wYMt-。 - Crescent Fresh
3个回答

9

试一下这个

sc = document.getElementsByTagName("script");

for(idx = 0; idx < sc.length; idx++)
{
  s = sc.item(idx);

  if(s.src && s.src.match(/some\.js$/))
  { return s.src; }
}

3
Tomasz,我是否漏掉了什么或者你在哪里初始化sc?而且,在我看来,如果你在idx = 0和s之前加上var关键字,整个代码会更加清晰。除此之外,代码很棒。 - Tom Bartel
Tom Bartel - 你是对的,已经修复了。谢谢你的建议。 - TomaszSobczak
如果在for循环中没有使用var idx=0,那么你将引入一个全局的idx变量(除非你之前用var定义了idx)。 - Russ

9
最简单的方法就是查找添加到文档中的最后一个脚本:
var scripts= document.getElementsByTagName('script');
var mysrc= scripts[scripts.length-1].src;

这必须在脚本的主体中完成,而不是在稍后调用的代码中完成。最好在脚本开头执行,并记住变量,以便在必要时可以在后续函数调用中使用,且不会受到脚本后面插入任何新的<script>节点的影响。


这个也适用于 async 属性吗? - Eric Seastrand

0

不确定在所有浏览器中是否有效,但可以尝试这样做:

function getScriptFileName() {
  return (new Error).fileName;
}

1
很遗憾,Error对象没有标准化,而且fileName似乎只存在于Mozilla中。 - bobince
似乎在Safari中不起作用。 - Sutra

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