2009-05-29 2 views
40

私はJavaScriptページでRESTful Webサービスコールを作成しており、次の警告を受け取ります:Google Maps APIを使用しているときに「同じ発信元ポリシー」の警告が表示されないのはなぜですか?

"このページはセキュリティ上のリスクを伴います。 "

今これを読んで、cross-domain, same origin policyを認識しています。しかし、私はGoogleのMaps APIのような他のAPIを使うと、そのような警告は出ません。明らかに、ドメインは私のローカルドメインと同じではありません。違いはなんですか?

私の最初の推測では、GoogleがREST消費量がXMLHttpRequestを使用している間に<script>タグを使用してページに「インポート」されていることです。そのような場合には、これらの2つのアプローチの違いは何ですか?以下は、物事を説明するかもしれない

+0

は、Fiddler2をなどのツールを入手し、これは本当に私のために動作しませんでした魔法 – epascarello

+0

を見る:ここ

は、クライアントのHTMLページが最後にどのように見えるかです。私はそれを試して、まだクロムとFirefoxで許可エラーの拒否を得た。 – Merritt

+0

@Merritt - これを部分的にデバッグする必要があります。 Webブラウザでプロキシページを参照すると、その内容がJavaScript呼び出しであるテキストが返されますか? –

答えて

5

http://markmail.org/message/5wrphjwmo365pajy

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

+0

あなたは正しい答えを持つ勇敢な魂のように見えます!ありがとう!最後のスレッドでは、要約のブログ投稿をhttp://www.teamlalala.com/blog/2009/04/14/how-do-you-get-data-from-one-domain-to-another-using- javascript/ –

+0

それを指摘してくれてありがとう。明らかに、それらのテクニックは、クエリ文字列パラメタを使用して、ほとんどの場合、より適切なものにすることによって、より有用にすることができます。 –

+2

あなたのリンクはもう有効ではありません。しかし、1つのメールグループに動作します。 –

0

この問題の解決策を要約したいと思います。役に立つURL hereがあります。

JavaScriptをインポートするときは、基本的にコード<script>タグを使用してコードを注入します。このタグを通じてインポートされたものは、グローバルコンテキストで直ちに実行されます。そのため、JavaScriptファイルを渡す代わりに、HTMLタグではなく、コード内でコールバックを呼び出すJavaScriptコードのテキストを返すページを返すWebサイトにURLを渡します。

URLパラメータを使用して、返される「コールバック」と、コールバックに入る必要のあるパラメータをページに伝えます。これが評価されると「SRC」パラメータによって返さページのコンテンツは、

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

:例えば、サーバー側で

myCallback(myParam); 

、あなたが優先されますそのURLのサイトを作成します。 OnLoad相当(使用しているサーバー側の言語を問わず)。ページHTMLの代わりに、OnLoadはURLパラメータを受け取り、上のコールバック呼び出しと一致するようにそれらを再スウィズルします。

置換が行われると、クライアントがページをロードするときにコールバックがただちに呼び出されます。これの利点は、 'src' URLがホストされたページのドメインと一致する必要がないことです。

<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> 
関連する問題