作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我玩 emscripten 是为了好玩,并编译了我的一个旧模拟器程序以在浏览器中运行。
该程序将输出保存为数据文件,由于我没有做任何特别的事情,它应该驻留在 MEMFS(内存文件系统)上。
如何允许用户从 MEMFS 下载生成的文件?我可以触发浏览器的常规保存文件对话框吗?
最佳答案
知道了:
$ emcc --bind -std=c++11 \
-s EXTRA_EXPORTED_RUNTIME_METHODS=FS \
-o main.js *.cpp
function offerFileAsDownload(filename, mime) {
mime = mime || "application/octet-stream";
let content = Module.FS.readFile(filename);
console.log(`Offering download of "${filename}", with ${content.length} bytes...`);
var a = document.createElement('a');
a.download = filename;
a.href = URL.createObjectURL(new Blob([content], {type: mime}));
a.style.display = 'none';
document.body.appendChild(a);
a.click();
setTimeout(() => {
document.body.removeChild(a);
URL.revokeObjectURL(a.href);
}, 2000);
}
<script>
// This must go BEFORE sourcing main.js:
var Module = {
onRuntimeInitialized: () => {
Module.postRun.push(() => offerFileAsDownload("filename.ext", "mime/type"));
}
};
</script>
<script src="main.js"></script>
int main() {
// ...
emscripten::val::global("window").call<void>(
"offerFileAsDownload",
string("filename.ext"),
string("mime/type")
);
// ...
}
关于Emscripten:提供下载/保存生成的 MEMFS 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54466870/
我玩 emscripten 是为了好玩,并编译了我的一个旧模拟器程序以在浏览器中运行。 该程序将输出保存为数据文件,由于我没有做任何特别的事情,它应该驻留在 MEMFS(内存文件系统)上。 如何允许用
我正在使用 emcc --preload-file 命令为我的 WebAssembly 游戏打包数据,该命令将其放入 MEMFS 并保存在 RAM 中,直到网页关闭。 游戏通常会打开一个文件,读取它的
我是一名优秀的程序员,十分优秀!