Получить содержимое HTML другого фрейма в другом домене - PullRequest
0 голосов
/ 26 июня 2009

Я читал, что вы не можете прочитать HTML другого фрейма, если этот фрейм находится в другом домене. Есть ли способ сделать это в Javascript? Я понимаю, что это ограничение в целях безопасности, но мое использование является законным.

Привет

Peter

Ответы [ 2 ]

0 голосов
/ 27 июня 2009

Да, вы точно можете прочитать содержимое фрейма, используя междоменный прокси. По сути, вам нужно создать серверный скрипт, который запрашивает URL-адрес src для рассматриваемого фрейма. На стороне клиента вы запрашиваете этот сценарий вместо URL-адреса src (который находится в другом домене и, таким образом, подлежит ограничениям безопасности в браузере), передавая URL-адрес src в качестве параметра.

Серверный скрипт

Ниже приведен пример использования PHP cURL.

<?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);

Дайте мне знать, если это работает для вас.

0 голосов
/ 26 июня 2009

Мы говорим об iFrame здесь? Если это так, не могли бы вы получить атрибут src iFrame (jQuery?) И инициировать запрос ajax, который возвращал бы страницу, или, возможно, передать атрибут src вашему собственному сценарию (PHP / ASP независимо от того), который использует CURL для получения информация, которую вы ищете?

...