是否可以从我使用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 中的开发人员控制台中进行检查