web-dev-qa-db-ja.com

Google Maps APIを使用しているときに「同じ生成元ポリシー」の警告が表示されないのはなぜですか?

JavaScriptページでRESTful Webサービス呼び出しを行っていると、次の警告が表示されます。

「このページは、制御されていない情報にアクセスしています。これはセキュリティ上のリスクをもたらします。続行しますか?」

今、私はこれについて読み、 クロスドメイン、同じオリジンポリシー を認識しています。ただし、GoogleのMaps APIなどの他のAPIを使用しても、このような警告は表示されません。明らかにドメインはローカルドメインと同じではありません。違いはなんですか?

私の最初の推測は、Googleが<script>タグを使用してページに「インポート」されているのに対し、私のREST消費はXMLHttpRequestを使用していることです。その場合、これらの違いは何ですか警告に値する2つのアプローチと警告しない2つのアプローチ

44
Jordan Parmer

以下で説明するかもしれません: http://markmail.org/message/5wrphjwmo365pajy

また、スクリプトハックをいくつか採用しています(たとえば、XHRの代わりに、スクリプトをDOMに挿入して、要求されたデータを取得します)。

7

この問題の解決策を要約します。役立つURL ここ を見つけることができます。

基本的に、ページからコードを挿入します<script> JavaScriptのインポート時のタグ。このタグを通じてインポートされたものはすべて、グローバルコンテキストですぐに実行されます。したがって、JavaScriptファイルを渡す代わりに、HTMLタグのページではなく、コード内のコールバックを呼び出すJavaScriptコードテキストを返すページを返すWebサイトへのURLを渡します。

URLパラメータを使用して、返す「コールバック」とコールバックに入る必要のあるパラメータをページに伝えます。例えば:

<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param1=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&param=myParam></script>
1
Jordan Parmer