我在我们的应用程序中嵌入了SpiderMonkey,我对范围有疑问。我在做的是:
问题在于:
如果在步骤2中定义了一个功能,例如:
function test()
{
console.println(this);
}
然后文档脚本包含:
test();
我看到的输出是[object Root],我希望看到[object Doc]。
答案 0 :(得分:1)
- 使用JS_EvaluateScript使用' this'运行特定于文档的脚本。作为文件的对象。
醇>
对于此步骤,您不应使用JS_EvaluateScript
,而应使用JS_CompileScript
编译脚本,然后使用JS_ExecuteScript
执行该脚本。额外的步骤是必要的,以提供不同的this
执行,而不是在评估时修复一个JS_ExecuteScript
。您对JS::AutoObjectVector scopeChain(cx);
scopeChain.append(your_document); // your_document will serve as 'this'
JS_ExecuteScript(cx, scopeChain, script, rval);
的通话如下:
0x0000110PPPP111KZY0 H123456789 XYZ 000000000000000000607532030000607532000060753203002014101707199999
答案 1 :(得分:0)
Brad Werth自36版以来为SpiderMonkey提供了正确的答案。旧版本的解决方案类似。使用JS_ExecuteScript(JSContext *cx, JS::HandleObject obj...)
其中obj是范围对象。