9

我使用Emscripten系统将一堆C++代码移植到Javascript中。 C++代码有很多调用fopen这是一个同步IO调用。在Emscripten中,我们使用XHR请求对本地资源进行模拟,但是在Firefox同步XHR调用中(responseTypeblobarraybuffer)仅在Web工作人员内部支持。转换所有C++代码以适应异步IO代码看起来非常复杂,因此对于我的第一次尝试,我想查看是否可以伪造一个同步XHR请求。有没有办法伪造一个同步XHR请求?

我最初的想法是,主循环可以与网络工作者共享某种状态,这可以在主循环暂停并等待网络工作者完成时进行同步io调用并更新共享状态。免责声明:我知道这不是典型的Javascript方式,但我正在移植同步代码,而不是从头开始编写新代码(我肯定会使用异步IO)。

鉴于网络工作者和主循环之间共享状态的限制,这个想法看起来站不住脚。

是否有其他方法可以做到这一点?

+0

*“火狐同步XHR调用内只一个网络工作者中支持” *这肯定不健全的权利。 – 2013-04-29 14:48:47

+0

这是我得到这个信息: https://github.com/kripken/emscripten/wiki/Filesystem-Guide “警告:Firefox和Chrome最近禁用同步二进制XHR时,这意味着这可不行“ – 2013-04-29 15:03:03

+2

@squint OP没有解释得很好(直到他的评论如上),但在MDN的[XHR页面](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest) :“从Gecko 11.0开始...以及WebKit内部版本528,这些浏览器不再允许您在执行同步请求时使用'responseType'属性。”这意味着你不能使用''arraybuffer''或''blob''的'responseType'获取二进制数据;这正在完成(我假设)明确阻止以同步方式获取(可能相当大的)二进制资源。 – apsillers 2013-04-29 15:20:04

回答

相关问题