3

たとえば、www.google.com の html ソース コードを ajax または jquery で読みたい (ソースを表示するだけでなく、解析する必要があるため、xmlhttp.responseText があると便利です)。

外部 Web ページのコンテンツを読み取り、特定の要素を取得する サーバー側で php を使用してそれを行う優れた方法があり ます Javascript は Web ページのソースを読み取ることができますか? ローカル ドメインのページを読み込もうとしている場合に便利です

上記のように yql+JSON も可能ですが、遅くてオーバーヘッドが大きいようです。

90kのjquery libをロードする必要がないので、私はajaxを好みます。私が見る限り...

var xmlhttp=null;
var url = 'bot.html?url=http://google.com';  //must redirect in bot.html
//var url='http://www.google.com';  wont work, 0 xmlhttp.status error
if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();  //src says buggy for IE7
} else {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.open("GET",url,true);
xmlhttp.send(null);

xmlhttp.onreadystatechange=function() {
 if (xmlhttp.readyState==4 && xmlhttp.status==200) {
    document.getElementById("result").innerHTML= xmlhttp.responseText;
 }
}

jqueryとほとんど同じです...

$("#result").load(url);

他の言及されたスタックオーバーフローで言及されていないのは、 ?url= を処理する方法です。私は(すべてのjsを保持するように)...

bot.html:
<head>
<script type="text/javascript">
var vars = query.split("&"); 
var pair = vars[0].split("=");
if (pair[0]=='url') {  // ex bot.html?url=http://www.google.com
    alert('hi '+pair[1]);
    window.location = pair[1];
    //top.location.href=pair[1];  or
}
</script>
... above jquery or ajax ...
<div id="result">Fill Me</div>

これはすべて、ローカルページ var url='index.php' (リダイレクトなし) では正常に機能しますが、google.com などの外部リンクではこれは機能しません。そして、プロキシしようとすると(上記のstackoverflowで例を挙げずにjqueryで回避されたように)、bot.html(それ自体)のソースをロードします(アラートやリダイレクトを行うことはありません)。これは理にかなっていると思います。ロード、していません。私は ajax にも同じプロキシ トリックを使用できると考えました。

.htaccess によるリダイレクト/プロキシの試行は、このアプリケーションには適合しません

4

1 に答える 1

0

質問の 2 番目のコード (下から) で何を達成しようとしているのかわかりませんbot.html

しかし!私はあなたのための解決策があると思います。あなたはおそらく、XMLHttpObjects が最初に提供されたドメイン以外のドメインにリクエストを行うことができないと基本的に述べている同じオリジン ポリシー (ウィキペディアまたはMDNのドキュメント) に反対しています。この背後にある考え方は、ブラウザー レベルで (つまり、JS ランタイム自体よりも高い権限で) そのような強制がなければ、外部スクリプトが AJAX 要求を盗聴、破損、またはハイジャックして、そのようなリクエストが行われたドメインまたはパラメーター。

回避策は、代わりにスクリプト タグを使用することです。これを行うために、 jQuery ソース(関連する部分については「DOMContentLoaded」を検索)から適応させたコードを少し示します。また、クロスドメインの Ajax リクエストを作成するために jQuery ライブラリ全体を含めたくありませんでした。クライアント側のアクションの速度をテストしていたのですが、テスト ターゲットの一部はまだ jQuery を必要としていなかったため、それを含めるとテストが歪んでしまいます。 .

function saveTime() {
    var s = document.createElement("script"), h = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
    s.async = "async";
    s.type = "text/javascript";
    s.onreadystatechange = function(result) {
        // callback function
        // Append the result into the inner HTML here
    };
    s.src = url;
    h.insertBefore(s, h.firstChild);
}

これで必要なものが得られるはずですが、type生の/完全な HTML コンテンツを取得するには、属性を微調整する必要がある場合があります。<script>指定したソースを含むタグをタグurlの先頭<head>(または非常に古いバージョンの IE の場合は本文)に追加します。クリーンアップ コードは変更しませんでした。jQuery ソースを調べると、リクエストが完了または失敗した後に DOM からタグを削除するための追加のハンドラーが実際にあることがわかります。

于 2012-12-02T21:59:09.367 に答える