0

我读过如果该框架驻留在另一个域中,您将无法读取另一个框架的 HTML。有没有办法在 Javascript 中做到这一点?我意识到这个限制是出于安全目的,但我的使用是合法的。

问候

彼得

4

2 回答 2

0

是的,您绝对可以使用跨域代理读取框架的内容。本质上,您需要创建一个服务器端脚本来请求相关框架的 src URL。在客户端,您请求这个脚本而不是 src URL(它在另一个域上,因此受到浏览器内的安全限制),将 src URL 作为参数传递。

服务器端脚本

下面是一个使用 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 回答
0

我们在这里谈论 iFrame 吗?如果是这样,您能否获取 iFrame(jQuery?)的 src 属性并启动将返回页面的 ajax 请求,或者将 src 属性交给您自己的脚本(PHP/ASP 等),该脚本使用 CURL 来收集你要的信息?

于 2009-06-26T19:29:06.237 回答