有没有办法伪造同步XHR请求?

时间:2013-04-29 14:42:32

标签: javascript asynchronous xmlhttprequest synchronous web-worker

我正在使用Emscripten系统将一堆C ++代码移植到Javascript。 C ++代码有许多调用fopen,这是一个同步IO调用。在Emscripten中,我们使用对本地资源但是的XHR请求来模拟这一点,在Firefox同步XHR调用中(responseType的{​​{1}}或blob)是仅在Web-Worker中支持。转换所有c ++代码以适应异步IO代码似乎非常复杂,所以对于我的第一次尝试,我想看看我是否可以伪造同步XHR请求。

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

鉴于web-worker和主循环之间共享状态的限制,这个想法看起来站不住脚。

还有其他方法吗?

2 个答案:

答案 0 :(得分:2)

所以在看到所有答案并做了一些自己的阅读之后,看起来最好的答案是:“你可以,但只能用于文本数据,你必须将其转换回二进制数据”。这很慢,但确实有效。

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data?redirectlocale=en-US&redirectslug=DOM%2FXMLHttpRequest%2FSending_and_Receiving_Binary_Data#Receiving_binary_data_in_older_browsers

答案 1 :(得分:1)

您是否看过像qunit和sinon这样的测试库?我认为Jasmine也可以做到,但我知道sinon可以做到这一点

http://sinonjs.org/docs/#server