JavaScriptページでRESTful Webサービス呼び出しを行っていると、次の警告が表示されます。
「このページは、制御されていない情報にアクセスしています。これはセキュリティ上のリスクをもたらします。続行しますか?」
今、私はこれについて読み、 クロスドメイン、同じオリジンポリシー を認識しています。ただし、GoogleのMaps APIなどの他のAPIを使用しても、このような警告は表示されません。明らかにドメインはローカルドメインと同じではありません。違いはなんですか?
私の最初の推測は、Googleが<script>
タグを使用してページに「インポート」されているのに対し、私のREST消費はXMLHttpRequestを使用していることです。その場合、これらの違いは何ですか警告に値する2つのアプローチと警告しない2つのアプローチ
以下で説明するかもしれません: http://markmail.org/message/5wrphjwmo365pajy
また、スクリプトハックをいくつか採用しています(たとえば、XHRの代わりに、スクリプトをDOMに挿入して、要求されたデータを取得します)。
この問題の解決策を要約します。役立つURL ここ を見つけることができます。
基本的に、ページからコードを挿入します<script>
JavaScriptのインポート時のタグ。このタグを通じてインポートされたものはすべて、グローバルコンテキストですぐに実行されます。したがって、JavaScriptファイルを渡す代わりに、HTMLタグのページではなく、コード内のコールバックを呼び出すJavaScriptコードテキストを返すページを返すWebサイトへのURLを渡します。
URLパラメータを使用して、返す「コールバック」とコールバックに入る必要のあるパラメータをページに伝えます。例えば:
<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback¶m1=myParam"></script>
これが評価されると、「src」パラメータによって返されるページコンテンツは次のようになります。
myCallback( myParam );
サーバー側では、OnLoadの同等物をオーバーライドするURLでサイトを作成します(サーバー側の言語を使用して)。ページのHTMLの代わりに、OnLoadはURLパラメータを受け取り、上記のコールバック呼び出しと一致するように再スウィズルします。
置換が行われると、クライアントがページをロードするとすぐにコールバックが呼び出されます。これの利点は、「src」URLがホストされているページのドメインと一致する必要がないことです。
最後に、クライアントのHTMLページは次のようになります。
<script type="text/javascript">
var myCallback = function( myParam ) {
alert( "this was called across domains!" );
};
</script>
<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback¶m=myParam></script>