获取通过ajax加载的iframe的HTML(请注意,iframe包含需要加载javascript的网页)

时间:2013-08-31 00:21:40

标签: php javascript jquery ajax iframe

是否可以通过使用jquery的ajax调用从我正在加载它的页面获取iframe的HTML(请注意iframe引用通过ajax调用加载的网页)?

Actualy我想废弃这个website的内容。 问题是这个网站是通过ajax加载的。所以我不能使用curl来获取需要加载javascript的网页内容。

对于这个问题的解决方案,我使用index.php中的ajax调用一个php文件,并将我的查询 q = blog 传递给将iframe返回到index.php的php页面

<iframe id="myframe" src="https://blekko.com/#?q=blog" width="100%" height="100%"></iframe>

成功的ajax响应后,我正在保存ajax的响应 iframe引用网站以及查询 在index.php的div中

    <div id="myhtml" style="display:none"></div>

在index.php的iframe中加载此website的内容后3到6秒 我在index.php中有一个jquery函数,它在间隔5秒后检查div id“myhtml”的html

<javascript>
var newInt = setInterval(function(){ check(); }, 5000);
function check(){
blekko_html = $("#myframe").contents().find("html").html();
alert(blekko_html);
}
</javascript>

但是每次check()函数调用时,都会返回/ alert this

<iframe id="myframe" src="https://blekko.com/#?q=blog" width="100%" height="100%"></iframe>

即使iframe加载了网页的内容,它也总是在iframe的html初始化之上返回,而不是其中的网页的html。

是否可以获取通过ajax调用加载的iframe的html,并且iframe包含通过ajax调用加载的网页?

如果我能够获得iframe的html,那么我将使用ajax将其再次发送到php页面,我可以抓取并获取所需的数据。

3 个答案:

答案 0 :(得分:2)

您正在尝试访问指向其他域名网页的iframe内容。

如果该iframe的src未指向您当前父网页所在的域,则无法访问iframe的内容。这称为跨域政策

您必须使用服务器端语言来获取给定网址的html并将其返回到索引页面以显示在任何div或其他任何内容中。

让我举个例子来解释为什么javascript无法进行跨域访问。

  • 假设我的网站上有一个像iframe一样的FB框
  • 现在每当有任何用户访问我的网站时,我都会触发点击 像盒子一样在iframe里面的盒子。
  • 这样我的FB页面就会有很多喜欢。
  • 但是由于跨域政策,这是无法做到的。

希望你明白我的观点

答案 1 :(得分:1)

您需要确保首先加载iframe内容

function check(){
    $("#myframe").load(function(){
          blekko_html = $("#myframe").contents().find("html").html();
          alert(blekko_html);
    });
}

答案 2 :(得分:0)

可能会将ifload添加到iframe并检查

<iframe id="myframe" src="https://blekko.com/#?q=blog" width="100%" height="100%" onload="check();"></iframe>

我会修改check()console.log(blekko_html)而不是alert

然后在Chrome或Firebug或IE F12中查看开发者控制台