-1

是否可以从我使用 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>

该网站的内容在 index.php 的 iframe 中加载 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() 函数时,它都会返回/警告这个

<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 页面,如果我可以进行抓取并获取所需的数据。

4

3 回答 3

2

您正在尝试访问指向另一个域的网页的 iframe 内容。

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

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

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

  • 假设我在 iframe 内的网站上有类似 FB 的框
  • 现在,每当任何用户访问我的网站时,我都会触发对类似框 iframe 内的类似框的点击。
  • 这样我的 FB 页面就会有数以万计的赞。
  • 但是由于跨域策略,这是无法做到的。

希望你明白我的意思

于 2013-08-31T06:31:34.450 回答
1

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

function check(){
    $("#myframe").load(function(){
          blekko_html = $("#myframe").contents().find("html").html();
          alert(blekko_html);
    });
}
于 2013-08-31T06:32:32.033 回答
0

也许将 onload 添加到 iframe 并在那里检查

喜欢

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

我会修改check()to doconsole.log(blekko_html)而不是alert,

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

于 2013-08-31T00:51:19.217 回答