Получение двоичных данных с использованием модуля запроса в SDK надстройки Firefox - PullRequest
0 голосов
/ 25 марта 2012

Я использую конструктор дополнений, и мне нужно получить двоичные данные (изображение).Я хотел бы сделать это, используя модуль request, но, как вы можете видеть из документации:

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

Есть только свойства text и json и raw отсутствует.

Как получить двоичные данные в скрипте дополнения?

1 Ответ

4 голосов
/ 25 марта 2012

Вы не можете сделать это с помощью модуля request, вам придется использовать обычный 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() после завершения запроса, в противном случае SDK надстройки сохранит его в списке методов, вызываемых при выгрузке (утечка памяти). См. документацию unload модуля .

...