多くの論争と実験の後、@nmaier と @canuckistani の親切な助けによりPOST
、Firefox アドオン (SDK) 内から実行中の Web サーバーにデータを転送する方法を構築することができました (データのフェッチにnode.js
使用)。次のようになります。express
app.post()
POST
var { Cc, Cu, Ci, Cr, Cm, components } = require('chrome');
var oReq = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
oReq.open('POST', targetURL);
oReq.setRequestHeader('Content-Type', 'text/plain');
oReq.onreadystatechange = function()
{
// readyState and status status handlers here...
};
oReq.send({ data : aURIEncodedString }); // object variant
また、
oReq.send( aURIEncodedString ); // string variant
POST
データを ing する2 つの方法を試しました。( encodeURIComponent
-encoded) 文字列として、およびキーと値のペアが 1 つだけのオブジェクトとしてです。
サーバー側にはnode.js
アプリがあり、POST
ed データを取得して処理を行います。残念ながら、からデータを抽出できないように見えるため、それを機能させることはできませんPOST
。次のようになります。
app.post('/grab/:fid', function(request, response)
{
var filename = request.param('fid');
var dataURL = request.body.data; // (and also just "request.body")
...
...
}
したがって、ここではexpress
ミドルウェアをapp.VERB
(POST
この場合は)とともに使用POST
して、クライアントからデータを受け取ります。ここまでtargetURL
は正常に動作します。クライアント側からの は正しくここを指し、ここでキャプチャされます。このコードが実行され、パラメーター ( filename
) が正常に抽出されます。
しかし、実際のPOST
ed ペイロードを取得できません。私が言うように、文字列とオブジェクトの両方を試しましたが、どちらも何も結果をもたらしませんでした。空のdataURL
変数 ({ }
またはundefined
) を取得します。
送信しようとしているデータはtoDataURL()
、HTML 5canvas
オブジェクトの関数によって作成された文字列です。これは、画像を表す base64 でエンコードされた文字列です。つまり、JavaScriptencodeURIComponent
関数でエンコードされた、いくつかの追加記号を含むプレーンな ASCII 文字列です。これまでのところ、サイズはかなり小さいです (それは問題かもしれませんが、現在、約 3K を送信しています。より大きな文字列を送信したいのですが、長さは最大で数百 Kb 程度です)。
通常 では、 が送信されるデータ値のキーであるオブジェクトとして送信されたからデータを抽出するときにnode.js
使用します。アプリにはこの種のロジックのインスタンスが他にもいくつかありますが、それらはすべて正常に動作します (主な違いは、jQuery を介して実行され、拡張機能内ではなく通常の Web ページ内で実行されることです。たとえば、 、request.body.<key-name>
POST
key-name
POST
$.post("http://mydomain.herokuapp.com/queue",
{
URL : URL,
Title : URLTitle,
ToWhom : ID
}).done(function(data) .....
と
app.post('/queue', function(request, response)
{
DB.myShopping(request.body.ToWhom, request.body.Title, request.body.URL, ....
これは完全に機能します。
nsIXMLHttpRequest
そのため、バージョンが編集対象のデータをどのようにパッケージ化するPOST
か、およびサーバー側で受信側をどのように構築して、編集対象のデータをキャプチャする必要があるかを知る必要がありますPOST
。誰かがアイデアを持っている場合は、それらについて知っていただければ幸いです。