javascript文件可以获得自己的名字吗?

Man*_*har 9 html javascript ajax

我试图在javascript中构建某种记录器功能.是否有任何API可供脚本获取自己的文件名?

paw*_*wel 13

这应该工作: (new Error).fileName

或者你可以尝试这个:

var filepath;
(function(){ 
    var scripts = document.getElementsByTagName('script'); 
    filepath = scripts[ scripts.length-1 ].src; 
}());
Run Code Online (Sandbox Code Playgroud)

第二个选项为您提供脚本文件的路径.

  • 第一种方法是Firefox唯一的方法:http://help.dottoro.com/ljfhismo.php (3认同)
  • 我知道这是执行时的最后一个.在解析文档时同步解释脚本,`(function(){}())`构造意味着它立即执行,此时正在执行的脚本是DOM中的最后一个脚本,因为它没有任何内容还没被解析过.但是,也许我应该编辑我的答案以反映这一点,这将无法使用延迟/异步加载的`<script>`元素. (3认同)

hsz*_*hsz 6

我看到两种方式:

  • 在每个JS文件中放入一个变量 var filename = 'script.js';
  • 使用<script>标记名称获取文件名

JS无法获得类似bash/perl/c脚本的文件名.


She*_*fie 5

如果我们可以获得当前脚本的标签,那么我们可以读取其src属性。摘录自以下/sf/answers/1592188741/

document.currentScript将返回当前正在处理其脚本的元素。

<script>
  var me = document.currentScript;
</script>
Run Code Online (Sandbox Code Playgroud)

好处

  • 简单明了。可靠。
  • 不需要修改脚本标签
  • 适用于异步脚本(延迟和异步)
  • 与动态插入的脚本一起使用

问题

  • 在较旧的浏览器和IE中将无法使用。

...所以从那里,我们可以简单地读取src属性!

<script src="http://website.com/js/script.js">
  alert(document.currentScript.src);
</script>

// Alerts "http://website.com/js/script.js"
Run Code Online (Sandbox Code Playgroud)