加载后如何获取 iframe 正文?

Posted

技术标签:

【中文标题】加载后如何获取 iframe 正文?【英文标题】:How get iframe body after load? 【发布时间】:2011-05-08 04:27:27 【问题描述】:

我需要在 iframe 加载后获取 iframe 正文

【问题讨论】:

我需要你更简洁。 如果文档位于另一个域中,您将无法从该 iframe 中获取任何内容。 【参考方案1】:

document.getElementById('frame').contentDocument.body 会在纯 javascript 中给你它,假设 iframe 的 ID 是frame。在 jQuery 中,这将是 $('#frame').contents().find('body')

请注意,由于同源策略,这仅在 iframe 和周围页面的 URL 具有完全相同的主机名和端口号时才有效。

编辑:您评论说您在尝试此代码时收到“访问被拒绝”错误。同源政策就是为什么会发生这种情况。优秀的浏览器安全手册有information about this。仔细阅读该网页会发现有一些突破的方法,尽管出于安全和隐私原因,除非您控制封闭的网站,否则这是不可能的。

【讨论】:

iframe src 它位于另一台服务器中,并且 (iFrame.contentDocument) 返回错误“Permission denied”或“Access denied”【参考方案2】:

由于security reasons,如果它位于不同的域中,则无法使用 javascript 获取 iframe 内容。改为查看JSONP。

【讨论】:

【参考方案3】:

经过大量搜索后,jQuery 解决方案实际上非常简单,所以当我通过各种代码和函数试图找到一些东西时,我想我会为其他人节省 30 分钟的头痛。

您实际上可以使用 parent. 访问父文档中的函数和变量,因此您实际上只需要向 iframe onload 添加一个事件侦听器即可运行 parent.function();

请记住,iframe 没有加载父级拥有的 javascript 文件(即没有 jQuery,没有 momentJS 等),因此在我的情况下,在父级上运行该函数是一个很好的方法。

<script>
function afterLoading()
    $('#messageLog').html('TIMESTAMP ---'+'>'+$('#displayWindow').contents().find("body").html()+'\n'+$('#messageLog').html());

$('#displayWindow').on('load', function()
    parent.afterLoading();
);
//below this is the complete code, the above 2 functions is how it works
setInterval("printQueue()",10000);
function printQueue()
    $('#displayWindow').attr("src","");
    $('#displayWindow').attr("src","http://127.0.0.1/test.php");

</script>
<div class="col-xl-4">
    <textarea id="messageLog" style="width:100%;height:100%;"></textarea>
</div>
<div class="col-xl-4">
    <iframe id="displayWindow" style="width:100%;height:100%;"></iframe>
</div>

【讨论】:

以上是关于加载后如何获取 iframe 正文?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取加载的 iframe 标题元素?

jquery在加载时获取iframe内容的高度

如何从 iframe 获取当前页面加载的 url [重复]

如何从 iframe 中获取内容类型?

如何禁用滚动文档正文?

获取内联iframe的大小