2012-01-05 3 views
1

読んでいただきありがとうございます。私は、外部URLのページのHTMLソースを変数に変換して、すべてが編集可能になるようにするJavascript関数を考え出しています。 URLが "html、htm、aspx"拡張子で終わるのではなく、代わりに入力フォーム変数の文字列(つまり、?type = AAA & color = BBB ...)がURLに含まれています。したがって、XMLHttpRequestメソッドは問題になりません。URLのHTMLをXMLHttpRequestなしで取得する

JS/jQueryでこれを行うことはできますか?私は同じオリジンポリシーについて聞いたことがありますが、PHPではこれだけですが、次のツールでもそれを行うことができます。http://www.iwebtool.com/code_viewer

+4

XmlHttpRequest? –

答えて

0

XMLHttpRequestは任意の有効なURLで動作し、適切なURLを与えて、 。

しかし、same-origin policyの制限があります。状況に応じて異なる回避策がありますが、受け取ったテキストを操作できるようにするには、実際には1つのオプションしかありません。あなたが現在持っているとしてだけのgetURLの最初の行としてこれを追加し、同じJavaScriptを使用:

url='/path/to/proxy.php?url='+encodeURIComponent(url); 

その後、サーバー(同じページを提供しています1及びそのジャバスクリプト)上で、proxy.phpを書く:

<?php 
    echo file_get_contents($_GET['url']); 
?> 

これにより、サーバーにはすべてのajaxリクエストが送信されますが、これには1つのドメインからの読み込み制限がありません。サーバーは要求したURLを読み込み、ロードしたページからの応答を返信します。上記のスクリプトでは、コンテンツ本体(ビュー元のときに表示される内容)のみが提供されることに注意してください.HTTPヘッダーにアクセスする必要がある場合は、それらを中継することもできます。

+0

こんにちは。私はこれを試しましたが、無駄です。以下に、このメソッドのコードを示します。ローカルWebページでのみ動作します。 – user1131175

+0

var http; if (window.XMLHttpRequest) { http = new XMLHttpRequest(); } else { try { http = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { http = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { http = false; } } } function getUrl(url) { http.open("GET",url,false); http.send(); return http.responseText; } user1131175

+0

この場合、問題はURLの形式ではなく、別のドメイン名からURLを読み込もうとしていることにあります。 JavaScriptをより安全にするために、ブラウザは同じドメインのものでない限り、スクリプトにURLをロードさせません。状況に応じて異なる回避策がありますが、サーバー側のプロキシを使用するように思えます。私はこれを私の答えにする方法を編集しました。 –

0

この場合、元の原ポリシーが適用されますが、サーバーサイドコード(PHP)とjQueryを組み合わせて使用​​することができます。少しの例があります。

PHP

<?php 
    $url = $_REQUEST['url']; 
    $curl_handle=curl_init(); 
    curl_setopt($curl_handle,CURLOPT_URL,$url); 
    curl_setopt($curl_handle,CURLOPT_CONNECTTIMEOUT,2); 
    curl_setopt($curl_handle,CURLOPT_RETURNTRANSFER,1); 
    $buffer = curl_exec($curl_handle); 
    curl_close($curl_handle); 
    echo($buffer); 
?> 

jQueryの/ HTMLあなたは何のURLはそれがでロードすることができるかどうかとは何かを持っている "で終わる" という考えを手に入れた

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript"> 
$.ajax({ 
    type: "POST", 
    url: "yourPhpScript.php", 
    data: "url=http://stackoverflow.com" 
}).done(function(content) { 
    $('#content').html(content); 
    //content is your variable containing the source 
}); 
</script> 

<div id="content"></div> 
+0

ありがとう、ステファン、返事が遅れました。あなたのメソッドは完璧に短いurlで動作しますが、urlが入力変数で終わるページのHTMLにアクセスしようとするときに同じ問題が発生します。たとえば、http://www.remax-oa.com/real-estate-listings/#mode=1&sl=toronto&mnp=6&mxp=110&pt=20&soh=false&dv=false&do=0を試してください。この関数は、「Bad Request(無効なURL )」。アイデアがあれば、助言してください。 – user1131175

+0

私はカールを一度も使用していませんが、私はそれがたくさんの時間をお勧めしているのを見ました。単純に 'file_get_contents'とは対照的に、ここでカールを使用することに具体的な利点があるかどうか知っていますか? –

+0

セキュリティ、その他のオプションが追加されました。 – Stefan

関連する問題