【问题标题】:Get HTML of an iframe loaded via ajax (please note that iframe is containing a webpage that needs javascript to load) [duplicate]获取通过 ajax 加载的 iframe 的 HTML(请注意 iframe 包含需要加载 javascript 的网页)[重复]
【发布时间】:2013-08-31 00:21:40
【问题描述】:

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

实际上我想废弃这个website 的内容。 问题是该网站通过 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>

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

【问题讨论】:

  • @SteAp 实际上不是。我的问题是不同的......我们可以使用 jquery 获取 iframe 的内容......但是如何获取我们通过 ajax 调用的 iframe 的内容以及 iframe 内的网页在几秒钟的 ajax 响应后加载.. .因为框架内的内容通过ajax加载。

标签: php javascript jquery ajax iframe


【解决方案1】:

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

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

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

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

  • 假设我在 iframe 内的网站上有类似 FB 的框
  • 现在,每当有用户访问我的网站时,我都会触发点击 在like box的iframe里面的like box。
  • 这样我的 FB 页面就会有十万个赞。
  • 但由于跨域策略,这无法完成。

希望你明白我的意思

【讨论】:

  • 你是对的......这就是为什么我在控制台中收到此错误权限被拒绝访问属性“文档”源文件:code.jquery.com/jquery-1.7.2.min.js ?_=1377911359134 Line: 3. 我的首要任务是服务器端语言,比如 php 来抓取 html ......但是我需要废弃并获取 HTML 的网页是通过 ajax 加载的,而 CURL 等所有服务器端方法都没有支持javascript...
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    也许将 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 中检查开发者控制台

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2013-03-09
    • 2021-03-28
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多