将 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
.
的范围内
我有一个 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
.