将 Javascript 函数添加到全局范围

Add Javascript function to global scope

我有一个 emscripten 应用程序。我有一个包含函数定义的 javascript 文件。我将该文件加载到一个字符串中,然后对其调用 emscripten_run_script。然后,我稍后尝试使用一些内联 EM_ASM 调用来调用该函数,但它说找不到函数定义。

    std::ifstream file("script.js"); // script.js has "someFunc" defined
    std::string str((std::istreambuf_iterator<char>(file)),
                     std::istreambuf_iterator<char>());

    emscripten_run_script( str.c_str() );

     // the below give error "someFunc not defined"
     EM_ASM({
        someFunc();
    });

但是,如果我将该 javascript 文件加载到一个字符串中,然后将该字符串附加到对函数的调用中

    std::ifstream file("script.js"); // script.js has "someFunc" defined
    std::string str((std::istreambuf_iterator<char>(file)),
                     std::istreambuf_iterator<char>());

    auto combinedStr = str + "someFunc();";

    emscripten_run_script( combinedStr.c_str() ); // works fine

如何将文件中定义的 javascript 函数添加到全局范围以供以后使用?

javascript 文件如下所示:

function someFunc()
{
}

在测试中我这样做似乎有效,这应该等同于你所做的:

#include <stdio.h>
#include <emscripten.h>

int main()
{
    char script[] = "someFunc = function() {"
                    "console.log(\"hello\");"
                    "};";

    emscripten_run_script(script);

    EM_ASM({
        someFunc();
    });
}

您的 script.js 是否声明函数在范围内是局部的(通过 var someFunc = function(){...}; 或类似的)? emscripten_run_script 与 JavaScript eval 并不完全相同,局部变量仅存在于 emscripten_run_script.

的范围内