2017-03-06 39 views
6

有什么方法可以在没有JavaScript的情况下获得对DOM和/或WebAPI(即全屏API)的读/写访问权吗?WASM访问DOM

我想在C(C源代码实际上是GC语言中的转译结果)中构建一个基本的应用程序。我正在构建的应用程序将以桌面应用程序运行(它并不意味着在“真实”的浏览器中运行),所以我可以根据需要调整环境(即布局引擎)。

回答

6

在WebAssembly最小可行产品中调用WebAssembly的唯一方法是通过导入和导出。将来,WebAssembly可能会在gain capabilities which allow the embedder expose APIs directly的嵌入式浏览器中包含DOM。

Importsexports虽然不是很复杂,但从您的C代码的角度来看,它们看起来像是一个extern调用,类似于Windows平台上的DLL。您可能使用Emscripten编译C代码,请参阅its documentation "Call JavaScript functions from C/C++"以了解其工作原理的细节(因为这不是您要问的问题,但我猜这是下一个问题)。


这不是从你的问题清楚,如果你:

  1. 要编译C代码和内WebAssembly 运行它里面的浏览器。
  2. 想要编译C代码并在WebAssembly 外部的浏览器中运行它。

或两者兼而有之。

+0

我期待运行编译的C - > WASM代码在Chromium嵌入式框架内,因此它将在嵌入式浏览器中运行。 JS桥梁并不是我正在寻找的东西,所以我现在将跳过它,并在获得真正的/原生的DOM访问权后重新考虑它。 – themihai

+1

你在找什么?如果您的需求没有得到满足,我建议在这里提交一个问题:https://github.com/WebAssembly/design/issues –

+0

这只是JS部分创造了额外的摩擦。也许这是值得的,如果你真的需要JS interlop或Web /浏览器支持是强制性的,但这不是我的情况,因此我现在跳过它的原因。我看到DOM访问正在路线图上。我还应该在github上填写一个问题吗? – themihai

1

对于WebAssembly中的JS对象看起来,WebAssembly人员还没有任何强烈的想法。

我想通过PR #1080,这是关于垃圾收集规范分拆到它自己的回购现在。不过,虽然这是发生,他们将移除,只提到与JS对象的网络平台&互操作中存在的规范,该规范中被描述的:

It's more aspirational that concrete,