Javascriptが同じドメインのスクリプトへのアクセスのみを許可されている場合、別のドメインのコンテンツを読み取って変更する必要があるマッシュアップをWebサイトで作成するにはどうすればよいですか?
Javascriptが同じドメインのスクリプトへのアクセスのみを許可されている場合、別のドメインのコンテンツを読み取って変更する必要があるマッシュアップをWebサイトで作成するにはどうすればよいですか?
回答:
アクセスしようとしているAPIがJSONPをサポートしている場合、リクエストでJavaScript関数名を指定するだけで、JSONPはmyfunc({the:data});
通常のjavascriptのように実行できるjavascriptを返すため、新しい<script src="www.website.com/somecall?jsonp=myfunc">
タグを作成します。「リクエストを送信」(リクエストで使用する場合、jQueryはこれを自動的type: jsonp
に$.ajax
行います)。
欠点は、APIのプロバイダーがJSONPをサポートする必要があることです。
ターゲットWebサイトのcrossdomain.xml
ルートに許可されているファイルがある限り、Flashはクロスドメインコンテンツにアクセスできます。これは通常、APIを提供するサーバーの場合です。
欠点は、ユーザーのブラウザーにFlashが必要であり、データを取得するWebサイトにクロスドメインリクエストを許可するcrossdomain.xmlが必要であるということです。
PHPなどのサーバー側言語にはBSの同じドメインの制限がないため、プロキシとして機能するスクリプトを使用できます(たとえば、cURLなどのhttp拡張機能を使用してダウンロードする)。
追加の利点は、サーバー上のデータをクリーンアップ(または複数のソースをマッシュアップ)してから、ウェブページ/ javascriptに転送できることです。したがって、データの有用な部分のみを抽出することもできます。帯域幅が問題になる場合があります。
欠点は、すべての要求がサーバーを経由する必要があるため、サーバーの負荷が増加することです。
ただし、ターゲットがクロスドメインまたはjsonpをサポートする必要がないため、どのリソースでも動作するという利点があります。したがって、他に何も機能しない場合、これは機能します。
Internet Explorerにはクロスドメインリクエストがあります
Firefox 3.5以降には、クロスオリジン共有標準がありますが、PHPのような特別なヘッダーを含めるには、アクセスしようとしているリソースを必要とします。
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
他のいくつかの主要なブラウザもこれをサポートしているため、古いブラウザをサポートする必要がなく、リソースを取得してそれらのヘッダーを送信するためにアクセスしようとしている場合、これが最善の策かもしれませんスクリプトが私の推奨です。
Firefoxにもユーザー設定がありますが、ユーザーcapability.policy.default.XMLHttpRequest.open
がブラウザーの設定を変更することは期待していません。
そのために(別のドメインの)APIを使用できます。Javascriptは、Webサーバー(ドメイン)にあるPHPファイル(またはその他のスクリプトファイル)を呼び出します。このファイルは、CURLを使用して(別のドメインの)APIを呼び出し、応答を取得します。