使用Firefox Add-on SDK中的请求模块接收二进制数据

时间:2012-03-25 16:04:45

标签: ajax firefox firefox-addon firefox-addon-sdk

我正在使用加载项构建器,我需要接收二进制数据(图像)。我想使用request模块执行此操作,但您可以从文档中看到:

https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/addon-kit/docs/request.html

只有textjson属性,raw不存在。

我应该如何在附加脚本中接收二进制数据?

1 个答案:

答案 0 :(得分:4)

您无法使用request模块执行此操作,您必须通过chrome authority使用常规XMLHttpRequest。这样的事情应该有效:

var {Cc, Ci} = require("chrome");
var request = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"]
                .createInstance(Ci.nsIJSXMLHttpRequest);
request.open("GET", "...");
request.onload = function()
{
  onUnload.unload();

  var arrayBuffer = request.response;
  if (arrayBuffer)
  {
    var byteArray = new Uint8Array(arrayBuffer);
    ...
  }
};
request.onerror = function()
{
  onUnload.unload();
}
request.send(null);

var onUnload = {
  unload: function()
  {
    // Make sure to abort the request if the extension is disabled
    try
    {
      request.abort();
    }
    catch (e) {}
  }
};
require("unload").ensure(onUnload);

如果您的扩展程序突然被禁用,确保请求中止的机制相当尴尬,这是request模块存在的主要原因,而不是简单地给您XMLHttpRequest。请注意,请求完成后调用onUnload.unload()非常重要,否则Add-on SDK会将其保留在卸载时调用的方法列表中(内存泄漏)。请参阅documentation of unload module