ローカルで実行されているサーバーに対して、Firefox アドオンから ajax リクエストを送信しようとしています。
$.ajax({type: "GET",url: "http://localhost:9000/getFoo?param=foo",
success: function (data) {
console.log("response: " + data);
},
error: function(xhr, textStatus, errorThrown) {
console.log("error! xhr status: " + xhr.status);
console.log("error! textStatus: " + textStatus);
console.log("error! errorThrown " + errorThrown);
}
});
この URL は、ブラウザに配置すると正常に機能しますが、アドオンではエラー コールバックが実行され、ステータス 0 でメッセージは表示されません。
少し調べてみたところ、これはクロスドメインオリジンエラーの兆候であることがわかりました (ただし、理由はわかりません)。これは、私が変更している元のアドオンのコードで、(リモート) URL が直接使用されるのではなく、パラメーターとして yahooapis.com に送信されたという事実によって確認される場合があります。
var q = encodeURIComponent('select * from html where url="'+url+'" and xpath='+"'//"+'td[contains(@class,"text")]'+"'"+' limit 1');
url = 'http://query.yahooapis.com/v1/public/yql?q='+q;
(これで、元のリクエストは機能します。ただし、ローカルホストでクエリをyahooに送信するのは意味がないように見えるため、私のものでもテストしていません)。
では、どうすればこれに対処できますか?私の場合、jQuery の方法 (これ) が唯一の適切な方法です。SDK からの呼び出し (名前は忘れました) を使用する別の可能性がありますが、これは機能しているようですが、JQuery を使用して要求を行う必要があるため、特定の条件があります。ここでクロスドメインの問題が発生する理由がまったくわかりません。また、クロス ドメイン ヘッダーをサーバーの応答に追加しようと盲目的に試みましたが、効果はありませんでした。
ありがとう。
編集:
誰かが完全なコードを見たい場合、これは私が編集しているアドオンです:
https://builder.addons.mozilla.org/package/197498/
問題ファイルは data/popup.js です。
コメントに答えるために、data/popup.js からこれを呼び出しています。このファイルはパネルで使用され、次のようにメインの js ファイル (lib/main.js) で初期化されます。
var mypanel = require("sdk/panel").Panel({
width:370,
height:60,
contentURL: data.url("clock.html"),
contentScriptFile:
[data.url("jquery-1.10.2.min.js"), data.url("popup.js")],
contentScript: "self.port.emit('resize', " +
"{width: document.documentElement.clientWidth, " +
"height: document.documentElement.clientHeight});"
});