2012-01-15 13 views
2

FirefoxでChromeとGreasemonkeyのuserscriptを実行しようとしています。GM_xmlhttpRequestレスポンスFirefoxでは空ですがChromeでは完璧です

GM_xmlhttpRequestは、両方のプラットフォームで動作するはずなので、私はGM_xmlhttpRequestを使用しています。 リクエストコードは両方のブラウザで動作するようですが、Firefoxでは予想される応答を得るChromeとは対照的に、responseTextは空です。

userscriptcode:

// ==UserScript== 
// @include  *.website.org/Forum/Read.aspx?* 
// ==/UserScript== 

     getstr = "thread="+thread+"&day="+getday; 
    GM_xmlhttpRequest({ 
     method: "POST", 
     url: "http://www.other.org/js/gm/get.php", 
     data: getstr, 
     headers: { 
      "Content-Type": "application/x-www-form-urlencoded", 
      "Content-type":"charset=utf-8" 
     }, 
     onload: function(response) { 
         alert(response.responseText); 
     } 
    }); 

"other.org" サイト上のPHPスクリプト:

$json = json_encode($array); 
    echo $json; 

はuserscriptはJSON.parse()で応答を処理しますが、それはありますここでは重要ではありません。

chromeでは、これは完全に機能しますが、firefoxではresponseTextが空です。

これは、これが同じ起源のポリシーと関係するかもしれないと私は読んだ。しかし、私はこれがどのようなものか、どうやって解決できるのか分かりません。すべてのヘルプは大歓迎です!

+0

実際にはデータを投稿していないようです。とにかくオンロード機能が有効になります。空のresponseTextは、phpスクリプトが処理するデータを取得していない可能性があります。 – Juniperus

+0

オブジェクトは同じ名前の複数のプロパティを持つことはできません。 charsetを最初の 'Content-Type'に入れます。また、より多くのヘッダ、 'Content-Length'を追加してみてください。最も安全な賭けは、(手動でフォームを送信するときに)Firefoxが通常のPOSTリクエストで送信するヘッダを調べてそれらをすべてコピーすることです。 – katspaugh

+1

Juniperus、問題ありません。重複したヘッダーのプロパティを排除して、あなたの質問を正確に解決しましたか? – katspaugh

答えて

3

オブジェクトは同じ名前の複数のプロパティを持つことはできません。 charsetヘッダーの値を最初のContent-Typeに入れます。

また、より多くのヘッダー、Content-Lengthを追加してください。最も安全な賭けは、(手動でフォームを送信するときに)Firefoxが通常のPOSTリクエストで送信するヘッダを調べてそれらをすべてコピーすることです。

関連する問題