使用WebAssembly调用Web API方法



是否可以将Web API与WebAssembly一起使用?如果是这样,怎么样?我对导航器接口更感兴趣。

是的,这是可能的。

使用WebAssembly工具链时,如何调用JavaScript API,取决于该特定工具链。这实际上是FFI的一种形式:从C 代码中,看起来您正在调用外部功能,但是工具链桥接到嵌入式器(这里是浏览器的JavaScript)。一些例子:

  • c with emscripten
  • sdl2
  • html5.h
  • OpenGl/webgl/OpenGL ES/OpenGL ES 2.0
  • Unity脚本

emscripten之类的工具链会自动为WebAssembly.instantiate生成importObject(以及.html.js文件)/大多数内部WebAssembly详细信息通常被隐藏(我在下面记录下来)。

>

此设计使您可以调用任何JavaScript代码,而不仅仅是JavaScript API。因此,您可以从WebAssembly调用自己的JavaScript代码。工具链简单地使处理通用的Web API集变得更容易,有时以跨平台的方式,例如SDL2执行音频,键盘,鼠标,操纵杆和图形。

内部详细信息

WebAssembly的JavaScript API允许您将importObject传递给WebAssembly.Instantiate构造函数和WebAssembly.instantiate函数:

new Instance(moduleObject [, importObject])
Promise<{module:WebAssembly.Module, instance:WebAssembly.Instance}>
    instantiate(BufferSource bytes [, importObject])

WebAssembly二进制格式包含一个导入部分,您(通过LLVM等编译器)声明将使用的导入。这些导入的字段中的每一个都在importObject中查找,并且可以通过WebAssembly的callcall_indirect OPCODE调用功能。

您可以调用任意JavaScript,又可以调用所需的任何Web API。将来,WebAssembly可能会获得允许嵌入器直接暴露API的功能,在浏览器嵌入中,可能包括DOM,Canvas,Events等。

相关内容

  • 没有找到相关文章

最新更新