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


Get HTML of an iframe loaded via ajax (please note that iframe is containing a webpage that needs javascript to load)

是否可以从我使用jquery通过ajax调用加载的页面中获取iframe的HTML(请注意,iframe指的是通过ajax调用加载的网页)

实际上,我想废弃这个网站的内容。问题是这个网站是通过ajax加载的。因此,我不能使用curl来获取需要加载javascript的网页内容。

为了解决这个问题,我从index.php调用一个带有ajax的php文件,并将我的查询q=blog传递到php页面,该页面将此iframe返回到index.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>

3到6秒后,此网站的内容加载到index.php的iframe中我在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()函数调用时,它都会返回/提醒这个

<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页面,这样我就可以进行抓取和获取所需的数据。

您正试图访问iframe的内容,该内容指向另一个域的网页。

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

您将不得不使用服务器端语言来获取给定url的html,并将其返回到索引页面,以便在任何div或其他地方显示。

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

  • 假设我的网站上有一个类似FB的盒子,里面有一个iframe
  • 现在,每当有用户访问我的网站时,我都会触发点击在相似框的iframe内的相似框
  • 这样,我的FB页面将有10万个赞
  • 但由于跨领域政策,这是不可能做到的

希望你明白我的意思

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

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

可能会将onload添加到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 中的开发人员控制台中进行检查