在SpiderMonkey

时间:2015-07-28 21:08:49

标签: spidermonkey

我在我们的应用程序中嵌入了SpiderMonkey,我对范围有疑问。我在做的是:

  1. 为我的整个应用创建一个全局对象
  2. 调用JS_EvaluateScript,其中包含许多我希望对整个App都是全局的函数。
  3. 创建特定于" Active Document"
  4. 的JSObject
  5. 使用JS_EvaluateScript使用' this'运行特定于文档的脚本。对象作为文档。
  6. 问题在于:

    如果在步骤2中定义了一个功能,例如:

    function test()
    {
        console.println(this);
    }
    

    然后文档脚本包含:

    test();
    

    我看到的输出是[object Root],我希望看到[object Doc]。

2 个答案:

答案 0 :(得分:1)

  
      
  1. 使用JS_EvaluateScript使用' this'运行特定于文档的脚本。作为文件的对象。
  2.   

对于此步骤,您不应使用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是范围对象。