如何从WebAssembly模块中检测浏览器信息?

问题描述 投票:1回答:1

如何从启动时通过JavaScript检测到的值中初始化C ++变量(编译为WebAssembly)?

此代码需要从WebAssembly模块启动,因此用户不能注入与实际值不同的值。

javascript c++ browser webassembly emscripten
1个回答
1
投票

说明

您可以从C ++函数内部运行JavaScript代码。这样的JS代码可以访问在Web浏览器中运行时通常可以访问的所有对象。为此,我们将使用screen.availWidth宏,该宏执行返回EM_ASM_INT值的JS代码。

快速解决方案

我们将JS代码插入C ++代码int中。使用example.cpp功能可确保代码在加载页面时自动执行,而无需手动加载WebAssembly模块。但是,您也可以使用其他功能,将其导出并在您的网页上执行。

int main()

我们用#include <iostream> #include <emscripten.h> int main() { int screen_width = EM_ASM_INT( return screen.availWidth;); std::cout << "Screen width=" << screen_width << std::endl; } 编译上面的example.cpp代码,如下:

Emscripten compiler

[输出是一个嵌入了emcc example.cpp -o example.html 函数的网页,其中包含JS代码(确实,开始)。要在允许跨域资源共享(CORS)的同时运行代码,我们将使用int main()工具(由于无法在Firefox上运行示例,因此我改用了Chrome):

emrun

评论

[此方法适用于标量类型为emrun --browser chrome example.html (使用int),EM_ASM_INT(使用double)的返回值,但也使用EM_ASM_DOUBLE的数组(使用char*的谨慎和手动内存管理,如图EM_ASM_INT所示。

© www.soinside.com 2019 - 2024. All rights reserved.