有人问how to get the value of a JSObject property from c .这对我有点帮助。
但是,有谁知道如何从 c 获取对象的当前 JavaScript 名称?
例子:
var foo={prop:'bar'};
然后在某处,例如在 jsapi.cpp 中:
JS_somemethod(JSContext *cx, JSObject *obj){
//how do i get the name 'foo' (or the current alias) here if *obj points to the foo (or whatever alias name) object?
}
感谢提示和答案!
最佳答案
好的,为了记录您评论中的问题澄清,我将在这里重复:
Maybe i tell you in short my purpose: For the integration of new security system in webbrowsers i need to find out what is accessed during a common session on a website. my aim is to get something like a log which objects are accessed and how (read,write,execute). for example: window.alert (x) window.foo.bar (w) ... you now why i need the names of the variables? maybe you've got an other idea?
提前说一下,这通常非常棘手。有几个选项可供您选择,但都有些困难:
- 使用调试 API,或者通过 cool new debugger object API或通过 jsdbgapi.cpp(firebug 使用的复杂且略显粗糙的界面)。您可以使用调试器功能来捕获所有属性访问、函数调用和本地引用,以便转储对象的有趣属性。
- 如果您只对访问您的(用户定义的)对象的方式感兴趣,您可以使用Proxies。包装您的对象并转储对它们执行的访问。浏览器中实际上使用了稍微更强大的低级代理版本来实现我们的安全功能。 (此外,大多数代理功能都可以通过我们的元对象协议(protocol)访问 JSAPI 中自定义创建的对象,但代理只是该功能的更简洁版本。)
- 在 jsinterp.cpp 中检测解释器循环。许多类似研究的工作关闭了 JIT 并检测了解释器循环,因为如果您以前从事过语言实现,这是很容易理解的。不幸的是,即使您有语言实现方面的经验,一开始将您想要执行的操作转换为解释器循环检测并不总是那么容易。
调试器对象绝对是我在此处列出的对象中最喜欢的选项。如果您采用这种方法并最终陷入困境,请随时访问 irc.mozilla.org 中的#jsapi 并尝试获取 jorendorff 或 jimb,它们是 a) 很棒的 b) 调试器对象的创建者。
关于javascript - SpiderMonkey:如何从 c 获取当前 JSObject 的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3927001/