检测JavaScript

时间:2009-10-16 11:23:33

标签: javascript parsing abstract-syntax-tree

我想使用JavaScript代码来“记录”全局变量的值。例如,我想知道特定变量 foo 在执行期间的所有值。记录不是问题。

实现这个最简单的方法是什么?我正在考虑使用Rhino(由Mozilla创建的Java中的JavaScript实现)来生成AST并修改此AST。

7 个答案:

答案 0 :(得分:1)

这可能是您正在寻找的:

http://ejohn.org/blog/javascript-getters-and-setters/

在setter中登录,就是这样。当然,我不知道这实际上在哪里,如果它必须是可信代码,或任何网页,或什么。

根据John Resig的代码,我会在调试代码中添加如下内容:

var placeLoggerInSetter = function(variableName, obj){ //obj may be window
    obj.__defineSetter__(variableName, function(val){
         console.log(val); //log whatever here
         obj[variableName] = val;
    });
}

var something = 0;
placeLoggerInSetter("something", window);
something = 1;
//out goes "1" in the console
something = 2
//out goes "2" in the console

那更像是吗?再一次,我没有测试它,obj[variableName]线看起来非常递归我...你会告诉它是否有效吗? :)

此外,还有Firebug

console.dir(obj)

将允许您在控制台中查看该对象的所有属性,而不是像log()一样将其转换为字符串。并且还扩展了属性等。方便。

答案 1 :(得分:1)

如果您不限于Rhino / Java,那么Johnson Ruby gem会将Spidermonkey / Tracemonkey解释器集成到Ruby中。它确实提供了对AST的访问。我没有尝试修改AST;不确定是否可能(可能是,根据所看到的代码中的名称判断)。

Johnson的宝石出现在github的jbarnette的Johnson回购中。 (切换ID; Stackoverflow不希望我在此时放入链接...)我最近添加了tracemonkey支持,但它尚未集成到主源中。这是我(smparkes)的约翰逊回复在github。

答案 2 :(得分:0)

Firebug(firefox的插件)具有日志记录功能,您可以将其写入控制台。比使用alert(“foo”)要好得多;为了一切

示例日志声明:

console.log("foo="+foo);

有关详细信息,请参阅this post(包括更多高级用法)

答案 3 :(得分:0)

我不知道通用解决方案或存在的任何东西,只需将这些变量包装在处理get / sets和stuff的日志类中。

答案 4 :(得分:0)

答案 5 :(得分:0)

您可以设置调试器;作为文档就绪事件的第一件事,只需逐步执行代码。

..弗雷德里克

答案 6 :(得分:0)

使用cvshead版本的Rhino,我检测了代码。