Как изменить способ ввода в браузере emscripten из window.prompt на что-то более разумное?
==========================================================================================

Взаимодействие с подсказкой браузера - действительно утомительная задача. Прежде всего, вы можете вставить только одну строку за раз. Во-вторых, единственный способ указать EOF - нажатьотменить', Последний, но не менее важный способ (в случае моей функции) заставить его перестать запрашивать ввод у пользователя через window.prompt - установить флажок, предотвращающий появление дополнительных запросов.

Для меня лучшим способом ввода было бы чтение какого-нибудь блоба. Я знаю, что могу взломать library.js, но вижу некоторые проблемы:

Чтение BLOB-объектов является асинхронным.Чтобы прочитать BLOB-объект, сначала нужно открыть файл, который пользователь должен выбрать первым.Я нея действительно не знаю, как запретить моей функции читать этот BLOB-объект вечно - здесь нет флажка, как в случае с window.prompt и яЯ не уверен, что если EOF остановит его, это не произойдет.t в случае window.prompt (помогла только проверка флажка).Лучшим решением будет какой-то обратный вызов, но я хотел бы увидеть подсказки от более опытных пользователей.

 например, вызвав[FS.init](https://kripken.github.io/emscripten-site/docs/api_reference/Filesystem-API.html#FS.init) в функции предварительного запуска модуля, передавая пользовательскую функцию в качестве стандартного ввода.

Функция довольно низкого уровня: она должна иметь дело с одним символом за раз. Чтобы прочитать некоторые данные из BLOB-объекта, вы можете сделать что-то вроде:

Обратите внимание (как вы намекали), из-за асинхронного характера считывателя может возникнуть условие гонки: считыватель должен быть загружен, прежде чем вы сможете ожидать данные на стандартном входе. Возможно, вам придется реализовать какой-то механизм, чтобы избежать этого в реальном случае. В зависимости от ваших точных требований, вы можете сделать так, чтобы программа Emscripten нена самом деле звоните`main()` пока у вас нет данных:

Примечание: это версия моего ответа на[Предоставление стандартного ввода в HTML-программу emscripten?](https://stackoverflow.com/questions/32912129/providing-stdin-to-an-emscripten-html-program/33119868#33119868) , но с акцентом на стандартный ввод и добавлением частей о передаче данных из BLOB-объекта.



Передайте эту ячейку памяти второмуEmscripten скомпилированная функция, которая затем обрабатывает содержимое файла и

Освободить выделенную память.