代码之家  ›  专栏  ›  技术社区  ›  Manohar

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

  •  8
  • Manohar  · 技术社区  · 16 年前

    我正在尝试用javascript构建某种记录器功能。脚本是否有API来获取自己的文件名?

    6 回复  |  直到 14 年前
        1
  •  15
  •   pawel    16 年前

    这应该起作用: (new Error).fileName

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

    第二个选项提供脚本文件的路径。

        2
  •  6
  •   hsz    16 年前

    • 在每个JS文件中放入一个变量 var filename = 'script.js';
    • 使用以下命令获取文件名: <script>

    JS不能像bash/perl/c脚本那样获取文件名。

        3
  •  6
  •   Community Mohan Dere    9 年前

    如果我们可以得到当前脚本的标记,那么我们就可以读取它的 src 属性摘自 https://stackoverflow.com/a/22745553/4396817

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

    <script>
      var me = document.currentScript;
    </script>
    

    利益

    • 使用动态插入的脚本

    问题

    • 在旧浏览器和IE中不起作用。

    …因此,从那里,我们可以简单地阅读 属性

    <script src="http://website.com/js/script.js">
      alert(document.currentScript.src);
    </script>
    
    // Alerts "http://website.com/js/script.js"
    
        4
  •  0
  •   dereli    16 年前

    不幸的是,这是不可能的。

    如果改变方法,获取函数名可能会有所帮助,这有时是可能的。您最好的机会是从“arguments.callee”中提取函数名。仅当函数定义为

    function FN() { ... }
    

    而且当

    var FN = function() { ... }
    
        5
  •  0
  •   Smellymoo    10 年前

    它需要您以某种方式命名该文件,例如,如果您有一个.js文件,但您想知道加载了哪个版本(例如,告诉php服务器)。所以你的js文件应该是“zoom_v34.js”。

        var version;
        (function(){
            var scripts = document.getElementsByTagName('script');
            for (var i=0; i<scripts.length; i++) {
                var start = scripts[i].src.indexOf('zoom_');
                if (start != -1) { var end = scripts[i].src.indexOf('.',start); version = scripts[i].src.substr(start+6,end-start-6); break; }
            }
        }());
        post='login{JS:'+version+'}';
    
        6
  •  0
  •   johnnydanger    9 年前

    您可以尝试将其放在JavaScript文件的顶部:

    window.myJSFilename = "";
    window.onerror = function(message, url, line) {
        if (window.myJSFilename != "") return;
        window.myJSFilename =  url;
    }
    throw 1;