44

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

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

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

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

4

2 に答える 2

7

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

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

于 2009-05-29T14:17:56.157 に答える
1

この問題の解決策は何かをまとめたいと思います。ここに役立つ URL があります。

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

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

<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param1=myParam"></script>

これが評価されると、「src」パラメーターによって返されるページ コンテンツは次のようになります。

myCallback( myParam );

サーバー側では、その URL にサイトを作成し、OnLoad に相当するものを (使用しているサーバー側言語で) オーバーライドします。ページ 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>
于 2016-01-05T17:30:50.737 に答える