函数undefined / null即使使用eval()

时间:2015-01-08 14:03:50

标签: javascript html vbscript eval hta

我需要帮助而且我不明白发生了什么。 我有一个脚本获取文件夹中的文件列表,并评估所有的js文件。 我注入了一些html,但是当我使用html时,它调用了我的函数,但是它说一个函数(以前评估过的)没有被定义?

编辑:{用html,javascript,css和vbs编写。在HTA中。 }

我尝试移动片段,但它仍然给我错误。 (我不能只复制并粘贴到主文件,它意味着是一个插件)

代码:(有些不是全部)

var inject='<div id="console">\
<br><div id="consoletitle" class="dynDiv_moveParentDiv dynDiv_bodyLimit"><center>Console</center></div>\
<a id="consolekey"></a><a id="consolea"></a>\
<input type="text" id="consoleba" onkeydown="if(event.keyCode==13){ss(event);}">\
</div>';
plugins.innerHTML+=inject;

这部分工作正常,并注入了html

function ss(event){
 var key=event.keycode;
 alert(key);
}

但它说这段代码不是(或者没有定义)

并且两个片段都在同一个文件中,即eval&#d; d。

错误:

Line: 1
Char: 23
Error: The value of the property 'ss' is null or undefined, not a function object
Code: 0
URL:

以下是加载和逐出每个文件的代码:

var fso=new ActiveXObject("Scripting.FileSystemObject");

这很好用。

function loadPlugins(){
    var fs=new Enumerator(fso.GetFolder("./plugins/").Files);
    for(;!fs.atEnd();fs.moveNext()){
        var file=fso.OpenTextFile(fs.item(),1);
        eval(file.readAll());
        file.close();
    }
}

似乎也在努力。

1 个答案:

答案 0 :(得分:0)

代码在loadPlugins函数的范围内进行评估,因此评估代码中定义的函数仅存在于该范围内。

您可以将函数编写为函数表达式并将其分配给全局变量,使其存在于全局范围中:

ss = function(event){
 var key=event.keycode;
 alert(key);
};

注意:ss变量在全局范围内隐式创建。如果使用var ss,它将是一个仅存在于函数范围内的局部变量。