但是,有没有人知道如何从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?
}
提示和答案!
答案 0 :(得分:1)
好的,只是为了记录您的评论中的问题澄清,我将在此重复:
也许我简单地告诉你我的目的:为了在web浏览器中集成新的安全系统,我需要找出在网站上的公共会话期间访问的内容。我的目标是获取一些日志,访问对象以及如何(读取,写入,执行)。例如:window.alert(x)window.foo.bar(w)...你现在为什么我需要变量的名称?也许你还有另外一个想法?
只是在前面说,这一般来说非常棘手。有几种选择,所有这些都有些困难:
调试器对象绝对是我在这里列出的那些人最喜欢的选项。如果你采用这种方法并最终卡住,请随时访问irc.mozilla.org中的#jsapi并尝试获取jorendorff或jimb,它们是a)非常棒和b)调试器对象的创建者。
答案 1 :(得分:0)
如果不仔细看API,我会说虽然在一些非常基本的情况下可能会这样做,但你不想这样做。这就是原因:
在Javascript中,与大多数语言一样,变量指向到值。变量本身不是值。该对象与foo名称无任何关系。
例如,您可以
var foo = {prop: 'bar'};
var fooo = foo;
var foooo = foo;
var quux = {q: foo, r: foo, s: [foo]};
所有这些foo
现在都是完全相同的foo;你要回哪一个?没有API调用,因为它太模糊而且不是非常有用。
但是,如果您真的想要找到包含值的全局变量的一个,您可以尝试迭代全局对象上的键并测试它们的值。
for(var key in this){
if(this[key] == myval){
var myname = key;
}
}
您必须将其转换为API调用,或者将其放入函数中并通过API调用 。
更简单直接的解决方案是找出你以后想要用foo做什么,然后传入一个回调函数来做到这一点,例如:与JS_CallFunction。
tl; dr:上一段。