Firefoxのクロスサイトxmlhttprequest?
-
23-08-2019 - |
質問
xmlhttprequestオブジェクトが「同じドメイン」ポリシーを遵守することを理解しています。ただし、WebサーバーからXMLをダウンロードして何かを行う単純な(POC)ローカルHTMLファイルを作成したい(単純な「Alert()」から始めましょう)。
まったく可能ですか?特別なFirefox設定オプションが必要ですか?
私がダウンロードしようとしているサーバーはです いいえ 私のコントロールの下で(実際にはGoogle APIです)。
私の簡単な試みはからのコードです Mozillaの「xmlhttprequestを使用」ページ. 。 「送信」メソッドからはあまり理解できないエラーを返します。
免責事項:私は主にC/C ++開発者です - 深刻なJSプログラミングを実行したことはなく、これらのAPIを使用しようとしませんでした。
解決
XMLHTTPREQUESTは、実際には同じドメインポリシーのはるかに厳しい実装を順守します。Document.Domainプロパティを設定することはできますが、2つのサブドメインから提供されるJavaScriptがお互いに話し合うことができますが、XmlhttprequestObjectでそれを行うことはできません。あなたの場合、まったく異なるドメインに行くと、JavaScriptでもそれを行うことができませんでした。
いくつかのオプションがあります。まず、リバースプロキシを使用して、外部サイトがサイトのサブドメインであるように見せることができます。 Apacheのmod_proxy、特にproxypassReverseをご覧ください
別の選択肢は、データをJSONオブジェクトとして返すことです。u003Cscript src="foo"> can retrieve whatever data it wants from wherever it wants. Downside of this is that it's not (easily) repeatable (as in multiple requests from same page).
また、「Google Mashups」のGoogle Googleをお勧めします。これらのほとんどは、「googlemashops.com」ドメインに住んでいるため、実装がはるかに簡単になります。そのドメインの外に住んでいる人もいれば、いくつかのアイデアを与えるかもしれません。
編集:xmlhttprequestオブジェクトを直接使用するのではなく、prototype.jsなどのサードパーティライブラリを使用することをお勧めします
他のヒント
取得しようとしているXMLがGoogleのJS APIの1つによって返される場合、XmlhttpRequestは必要ありません(これは、ページと同じドメインでのみ使用できるため)。
したがって、Maps OneなどのGoogle APIを使用する場合、通常、ページのどこかに共通のAPIへの参照を追加することから始めます。
<script type="text/javascript" src="http://www.google.com/jsapi?key=your_google_api_key"></script>
次に、ページに使用する予定の特定のAPIへの参照を追加します。
<script type="text/javascript">google.load("maps", "2");</script>
これで、そのAPIで提供されるさまざまな関数を呼び出すことができます。
<script type="text/javascript">
function initialize() {
var map = new google.maps.Map2(document.getElementById("map"));
map.setCenter(new google.maps.LatLng(41.86, 87.68), 13);
}
google.setOnLoadCallback(initialize);
</script>
xmlhttprequestは必要ありません:)
JSONPを使用してこれを行うことができます。私がやる ここ jQueryとPHPを使用します。基本的に、PHPプロキシを使用してJSONの返信をラップして、JQueryが処理できるようにします。それはBSDの下です。
または、IE8を使用してみてください。 Webサイトではなくディスクから実行されている場合、IE8はすべての通常のドメイン制限を無視し、必要なデータを取得します。
jquery(およびおそらくxhrですが、直接使用しないようにしています)を使用すると、異常なヘッダーや非Getメソッドを指定しない場合、クロスドメインリクエストを喜んで実行できます。これらを使用する場合は、オプションリクエストを有効にするためにサーバーを制御する必要があります。
見る https://developer.mozilla.org/en/http_access_control 詳細については。