11

我有一个简单的程序,说如下:

#include <stdio.h>

int main()
{
    char buf[100];
    while (fgets(buf, sizeof(buf), stdin) != NULL) {
        printf("You typed: %s", buf);
    }
}

我使用 Emscripten 编译了它:

emcc -o hello.html hello.cpp

这给了我一个非常基本的 Emscripten 生成的网页,其中包含一个用于程序输出的简单窗口。但是,该fgets()调用会导致浏览器弹出窗口,大概来自prompt(). 我可以输入内容,结果最终会显示在输出窗口中。这不是一个理想的交互体验。

我想要的是一个更传统的“控制台”界面,用户可以在终端窗口中交互式地键入以向交互式程序提供输入。

我怀疑解决方案可能在于JQueryTerminalHyperXterm.js 之类的东西,但我目前还不清楚如何将其中的任何一个实际连接到 Emscripten 编译的程序。

如何为我的 Emscripten 代码提供“控制台”界面?

4

1 回答 1

4

这不完全是您想要的,我认为这是不可能的,但这里是异步代码概念的教授,它在 C 中滥用 fetch API 并在 JavaScript 中使用代理来处理来自 C 的消息。您可以将其扩展为具有任何需要在 JS 中完成的异步代码。该示例使用 jQuery 终端,它的行为与您的示例 C 代码完全相同。

https://gist.github.com/jcubic/87f2b4c5ef567be43796e179ca08c0da

我还在emscripten repo 中创建了一个关于异步代码的问题

编辑:有人能够使用这种方法将 R 编程语言编译为 WebAssemly:https ://github.com/georgestagg/webR

于 2018-01-18T13:45:20.270 回答