2012-03-25 4 views

Antwort

4

Sie können dies nicht mit dem request Modul tun, müssen Sie die reguläre XMLHttpRequest über chrome authority verwenden. So etwas sollte funktionieren:

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); 

Der Mechanismus, um sicherzustellen, dass die Anforderung abgebrochen wird, wenn Ihre Erweiterung plötzlich deaktiviert ist ziemlich umständlich ist, das ist der Hauptgrund, die request Modul eher vorhanden als nur geben Sie XMLHttpRequest. Beachten Sie, dass es wichtig ist, onUnload.unload() aufzurufen, sobald die Anforderung abgeschlossen ist. Andernfalls wird das Add-on-SDK es in der Liste der Methoden beibehalten, die beim Entladen (Speicherverlust) aufgerufen werden. Siehe documentation of unload module.

+2

Wenn Sie dies in Ihrem Add-On verwenden, erleichtert es die Überprüfung (und das Testen!), Wenn Sie diesen Code in ein eigenständiges Modul einfügen. – canuckistani

+0

@canuckistani Es scheint eine gute Idee zu sein, aber wie stelle ich die Codes tatsächlich in ein diskretes Modul? – bobo

+1

Das SDK verwendet das commonJS-Format. Eine Erläuterung finden Sie in den Dokumenten unter https://addons.mozilla.org/en-US/developers/docs/sdk/1.5/dev-guide/addon-development/commonjs. html – canuckistani