如何将 emscripten 浏览器输入法从 window.prompt 更改为更合理的方法?

mno*_*tka 7 javascript c++ stdin node.js emscripten

我有一个 C++ 函数,它曾经被调用消耗来自 stdin 的输入。使用 emscripten 将此函数导出到 javascript 会导致调用 window.prompt。

与浏览器提示交互确实是一项乏味的任务。首先,您一次只能粘贴一行。其次,指示 EOF 的唯一方法是按“取消”。最后但并非最不重要的唯一方法(在我的函数的情况下)使其停止通过 window.prompt 要求用户输入是通过选中防止弹出更多提示的复选框。

对我来说,最好的输入方法是阅读一些 blob。我知道我可以破解 library.js 但我看到了一些问题:

  1. 读取 blob 是异步的。
  2. 要读取 blob,首先必须打开用户必须先选择的文件。
  3. 我真的不知道如何阻止我的函数永远读取这个 blob - 没有像 window.prompt 这样的复选框,我不确定如果不是在 window.prompt 情况下发现 EOF 是否会阻止它(仅检查复选框有帮助)。

最好的解决方案是某种回调,但我希望看到更有经验的用户的提示。

abe*_*ier 1

据我了解,您可以尝试以下操作:

  1. 在 Javascript 中实现选择文件并通过 JavascriptBlob界面访问它。
  2. 在Emscripten中分配一些内存

    var buf = Module._malloc( blob.size );
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将您的内容Blob写入 Javascript 返回的内存位置。

    Module.HEAPU8.set( new Uint8Array(blob), buf );
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将该内存位置传递给第二个Emscripten编译函数,然后该函数处理文件内容并

  5. 释放已分配的内存。

    Module._free( buf );
    
    Run Code Online (Sandbox Code Playgroud)

最好先阅读维基百科