Как запустить интерактивную программу, скомпилированную с помощью Emscripten, на веб-странице?

У меня есть простая программа, скажем следующее:

#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(), Я могу напечатать вещи, и результаты в конечном итоге будут показаны в окне вывода. Это не идеальный интерактивный опыт.

То, что я хотел бы, является более обычным "консольным" интерфейсом, где пользователь может вводить интерактивно в окне терминала, чтобы предоставить ввод для интерактивной программы.

Я подозреваю, что решение может заключаться в чем-то вроде JQueryTerminal, Hyper или Xterm.js, но мне пока неясно, как на самом деле подключить любой из них к программе, скомпилированной Emscripten.

Как я могу предоставить "консольный" интерфейс для моего кода Emscripten?

1 ответ

Это не совсем то, что вы хотели, я думаю, что это невозможно, но вот профессор концепции асинхронного кода, он злоупотребляет извлечением API в C и использует Proxy в JavaScript для XHR, который обрабатывает сообщения из C. Вы можете расширить его, чтобы иметь любой асинхронный код, который нужно сделать в JS. В примере используется терминал jQuery, и он ведет себя точно так же, как ваш пример кода C.

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

Я также создал проблему об асинхронном коде в репозитории emscripten

Другие вопросы по тегам