2010-12-08 15 views
0

私はブログシステムに投稿としてユーティリティを書き込もうとしています。制限は、サーバー側のコードを実行できないということです。クライアントサイド(JavaScript)コードのみを実行できます。私は外部ドメインに要求を送信し、その結果を解析したいと思います。クライアントサイドJavaScriptを使用して外部サーバーからAjaxリクエストを取得する方法

例えば、人々が私のユーティリティを使用する方法に基づいて、私は、このような含まれている場合がありますhttp://example.com/getPage.html?page=A、など、ページのHTMLを取得できるようにしたい:私は保存することになる...

<html> 
... 
<body> 
... 
    <table id="targetTable"> 
    <tr><td>Some Data</td></tr> 
    <tr><td>Some Data</td></tr> 
    <tr><td>Some Data</td></tr> 
    </table> 

は、 JavaScriptの文字列で検索し、必要なデータを検索します。

クライアント側コードのみを使用して、このページを外部ドメインから照会したいです(つまり、スクリプトはhttp://example.comで実行されておらず、http://example.comと提携していません)。

私はjQueryとit saysを使って、jQuery.get()メソッドがsame origin policyのために機能しないと考えています。私は何か別の方法をしたいことをする方法はありますか?たとえば、iframeをロードしてから、HTMLプロパティを何とか読んでいますか?

答えて

0

私はそれが不可能だと恐れています。 jsonpと呼ばれる規約を使用して回避することはできますが、jsonオブジェクト(もちろんhtml文字列を含むことができます)を取得することしかできません。しかし、サーバーは、jsonp要求をサポートしている場合にのみjsonp要求に応答することができます。

問題の最も簡単な回避策は、htmlページを取得し、json-dataを返す小さなサーバーを作成することです。次に、サーバーにajax呼び出しを送信し(例:http://www.yourserver.com/?page_to_get=http%3A%2F%2Fwww.example.com%2FgetPage.html%3Fpage%3DA)、example.comからデータをフェッチし、クライアント側のスクリプトにjsonとして返します。ちょうど私の引数、jQueryのAJAXのページから引用した部分強化する

:により、ブラウザのセキュリティ制限に

を、 最も「アヤックス」の要求が 同一生成元ポリシーの対象となります。要求 は、別のドメイン、サブドメイン、または プロトコルからデータ を正常に取得できません。

スクリプトとJSONPリクエスト は、同じオリジンの対象外です ポリシーの制限。

1

JSONPと最近のCORSをご覧ください。これらの技術を使用しても、JavaScriptのみを使用してサーバーサイドのコードを使用することはできません。

0

別のドメインからiframeをロードするか、別のドメインにPOSTを呼び出すことができます。

幸いなことに私たちのセキュリティのために残念ながらあなたの問題のために、同じ原産地政策のためにJavascriptで何かを読むことはできません。

他のドメインから協力を得ることができない場合。例:JSONPが有効になっているか、window.postMessageがある場合、唯一の解決策はWebサーバーをプロキシとして使用することです。
Google App Engineのような無料の(トラフィックが巨大でない場合)インスタンスを手渡しているサーバー。

このサーバーをajax、JSONP、またはiframe + window.postMessageで、ページコンテンツを取得してブラウザに配信する汎用サービスで呼び出します。

関連する問題