0

別のドメインにフレームが存在する場合、そのフレームのHTMLを読み取ることができないことを読みました。Javascriptでこれを行う方法はありますか?この制限はセキュリティ上の目的であると認識していますが、私の使用は合法です。

よろしく

ピーター

4

2 に答える 2

0

ここでiFrameについて話しているのですか?もしそうなら、iFrameのsrc属性(jQuery?)を取得して、ページを返すajaxリクエストを開始するか、CURLを使用して収集する独自のスクリプト(PHP / ASPなど)にsrc属性を渡すことができませんでした。あなたが求めている情報は?

于 2009-06-26T19:29:06.237 に答える
0

はい、クロスドメインプロキシを使用してフレームの内容を確実に読み取ることができます。基本的に、問題のフレームのsrcURLを要求するサーバー側スクリプトを作成する必要があります。クライアント側では、src URL(別のドメインにあるため、ブラウザー内のセキュリティ制限の対象)の代わりにこのスクリプトを要求し、srcURLをパラメーターとして渡します。

サーバーサイドスクリプト

以下は、cURLを使用したPHPの例です。

<?php

$target = $_REQUEST['t'];
if (empty($target)) { die 'no url provided'; }

$useragent="Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $target);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$res = curl_exec($ch);
curl_close($ch);

echo $res;

?>

クライアント側のスクリプト

ページで、次のJavaScript関数を使用して、ターゲットフレームのHTMLを返します

    var URL = top.frames.(YOUR FRAME NAME HERE).location;

var xh = null;
if (window.XMLHttpRequest) {
  xh = new XMLHttpRequest();
} else if (window.ActiveXObject) {
  xh = new ActiveXObject("Microsoft.XMLHTTP");
} else {
  alert("Your browser does not support XMLHTTP.");
  return false;
}

var ret = null;
xh.onreadystatechange = function() { 
  if (xh.readyState == 4 && xh.status == 200) {
    // do whatever you want with the html here
    ret = xh.responseText;
  }
}
xh.open("GET", url, false);
xh.send(null);

これがあなたのために働くかどうか私に知らせてください。

于 2009-06-26T20:39:49.870 に答える