加载文档后获取当前运行的javascript文件名

时间:2013-09-20 13:56:23

标签: javascript jquery

有没有办法在文档准备好后获取javascript文件的文件信息(文件名,路径),而不知道有多少脚本或它们的加载顺序?

<html>
  <head>
    <script src="http://www.example.ex/js/js1.js" type="text/javascript">
    <script src="http://www.example.ex/javascript/js2.js" type="text/javascript">
    <script src="http://www.example.ex/scripts/js3.js" type="text/javascript">
    <...>

文件js2.js的含义如下:

$(document).ready(function() {
  // get the filename "js2.js"
}

我能做到

var scripts = document.getElementsByTagName("script"),
    scriptLocation = scripts[1].src;

但索引“[1]”必须是动态的,因为我不知道加载脚本的顺序。

5 个答案:

答案 0 :(得分:3)

也许完整的答案比我的评论更有帮助。如果您将此代码放入js2.js,您就会得到您想要的内容。关键是在一段代码中捕获scriptLocation,该代码与加载文件同步运行,这意味着回调中

var scripts = document.getElementsByTagName("script"),
    scriptLocation = scripts[scripts.length - 1].src;

$(document).ready(function() {
  // logs the full path corresponding to "js2.js"
  console.log(scriptLocation);
}

答案 1 :(得分:2)

Error.stack获取行号和文件名,例如:

console.log((new Error).stack.split("\n"));

请参阅Error.stack

有关浏览器兼容性,请参阅previous SO question

答案 2 :(得分:1)

不完全确定你所追求的是什么,但如果你想引用DOM中加载的所有脚本,你只需要这样做:

var scripts = document.getElementsByTagName("script");
for(var i = 0; i < scripts.length; i++){
     var scriptLocation = scripts[i].src;
}

答案 3 :(得分:0)

var scripts = document.getElementsByTagName("script");
for (var i = 0; i < scripts.length; i++) {
    if (scripts[i].src.match(/<desired filename>/) {
        scriptLocation = scripts[i];
    }
}

如果我正确地理解了你的问题,那应该可以解决问题。

答案 4 :(得分:0)

var scriptName = [].slice.call(document.getElementsByTagName('script')).pop().getAttribute('src');

document.getElementsByTagName('script')返回页面脚本HTMLCollection。最后一个元素是当前脚本。 HTMLCollection没有获取最后的方法,但在[].slice.call转换为Array之后,我们可以调用pop来执行此操作。最后getAttribute返回所需的文件名。

相同的代码可用于将参数传递给js-script

<script src="file.js" args="arg1;arg2">
...
var args = [].slice.call(document.getElementsByTagName('script')).pop().getAttribute('args').split(';');