如何获取正在执行的JavaScript文件的名称?

时间:2013-08-15 17:39:26

标签: javascript

我正在开发一个包含多个功能的项目,因此我尝试在一个单独的JavaScript文件中组织每个功能,以便按需加载代码。我想标准化加载和执行过程,所以我试图开发一个可以加载和执行JavaScript文件的函数,如果它不存在于内存中,或者只是在已经加载的情况下执行它。一种方法是使函数需要两个参数,文件名和入口点函数的名称,然后检查脚本是否已经加载,如果它只是执行入口点函数,或者如果它不是,那么加载脚本并在onload事件上执行入口点函数,这种方法工作正常,但它需要主模块知道所有入口点函数名称,这在将来可能会变得痛苦,因为粗心的程序员可能无意中复制了一个函数名。一个更清洁,更安全的方法是命名" main"所有的入口点函数,并在第一次执行时关联" main"到它的脚本DOM对象......或多或少是这样的:

加载模块:

function(){
   function main(){
      .
      . some code here
      .
   }
   Install(getThisFileName(),main);
}();

主要模块:

function Load(fn){
var el,ff,i
   el = document.getElementsByTagName("script");
   ff = "http://"+window.location.host+fn;
   for(i=el.length-1;i>=0;i--){
      if(el[i] && el[i].src==ff){
         el[i].Main();
         return;
      }
    }
    el = document.createElement("script");
    el.type = "text/javascript";
    el.src = ff; 
}

function Install(ff,ep){
var el,i;
   el = document.getElementsByTagName("script");
   for(i=el.length-1;i>=0;i--){
      if(el[i] && el[i].src==ff){
         el[i].Main = ep;
         ep();
         return;
      }
   }
}

但是为了做到这一点,我需要知道正在执行的JavaScript文件的名称,我甚至不知道它是否可能。任何想法?

3 个答案:

答案 0 :(得分:1)

最简单的方法可能是先包括:

var currentFile;
function getThisFileName() {
  return currentFile;
}

在顶部的每个文件的开头,只需执行:

currentFile = 'thisFileName.js';

这只会在你的代码按顺序执行时才有效,一旦加载了所有文件,currentFile将始终是最后一个文件的名称。

另一种方法是在每个文件的每个函数的开头设置currentFile。因此,在访问该特定功能时,您可以调用getThisFileName(),它将告诉您上次运行的文件或正在运行的当前文件。

不幸的是,这会对您的代码本身产生一些开销。

答案 1 :(得分:0)

以下内容将为您提供所有脚本作为数组。

var allScripts = document.getElementsByTagName("script");

当前文件将始终是最后一个..所以allScripts[allScripts.length-1]将为您提供当前的javascript文件。您可以从此处访问src属性。

编辑: 这对于异步实现不起作用。

答案 2 :(得分:0)

您可以全局声明一个对象,如:

var scripts = {
    addScript : function(filename) {
        scripts[filename] = {
            loaded : true,
            executed : false
        }
    }
}

然后在每个文件调用的最底部:

scripts.addScript('myFilename.js');

然后在脚本的执行调用结束时:

scripts['myFilename.js'].executed = true;

然后,您可以随时检查scripts以查看是否加载/执行了特定文件。