0

Javascript で XMLHttp リクエストを実行する Firefox アドオンを作成しようとしています。このリクエストからデータを取得し、*.body.innerhtml に送信したいと考えています。

それがこれまでの私のコードです...

var xhr = new XMLHttpRequest();
xhr.open("GET", "http://xx.xxxxx.com", true);
xhr.send();
setTimeout(function() { set_body(xhr.responseHtml); }, 6000);

データを受信する代わりに、「未定義」と表示されます。xhr.responseHtml を responseText に変更すると、何も得られません。なぜ何も得られないのかわかりません。私はFirefox 12.0でUbuntu 12.04 LTSに取り組んでいます。

スクリプトの詳細が必要な場合は、お問い合わせください。

アップデート:

set_body 関数

document.body.innerHTML = '';
document.body.innerHTML = body;
document.close();
4

3 に答える 3

3

解決済みの更新:

RequestHeadersを決定する必要がありました(xhr.openの直後):

xhr.setRequestHeader("Host", "xxx");

次のアイテムの場合:ホスト、オリジン、リファラー。したがって、同一生成元ポリシーには本当に問題があったようです。

しかし、今ではうまくいきます!ありがとうございます!

于 2012-06-06T21:18:51.177 に答える
1

openの最後のパラメータをtrueに設定すると、非同期イベントが要求されます。したがって、次のようにxhrにコールバックを追加する必要があります。

xhr.onReadyStateChange = function(){
   // define what you want to happen when server returns
}

これは、サーバーが応答したときに呼び出されます。非同期なしでこれをテストするには、3番目のパラメーターをfalseに設定します。次に、send()はブロックし、応答が返されるまでそこで待機します。6秒の任意のタイムアウトを設定することは、これを処理する正しい方法ではありません。

于 2012-05-29T21:35:16.653 に答える
1

このコードは動作するはずです:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
  if (xhr.readyState == 4) {
    set_body(xhr.responseText);
  }
};
xhr.open("GET", "http://xx.xxxxx.com", true);
xhr.send();

URL http://xx.xxxxx.comから正しい応答を得ていることを確認してください。クロスドメイン呼び出しに問題がある可能性があります。ドメインhttp://first.comにページがあり、ドメインhttp://second.comから XMLHttpRequest を実行しようとすると、Firefox はサイレントに失敗します (エラー メッセージも応答も何も表示されません)。XSS(クロスサイトスクリプティング)を防止するためのセキュリティ対策です。

とにかく、chrome://プロトコルから XMLHttpRequest を実行すると、安全であると見なされ、機能します。したがって、このコードを使用して、ローカルホストなどからではなく、アドオンからリクエストを行うようにしてください。

于 2012-05-30T09:45:33.167 に答える