首页 > 解决方案 > 如何在另一个 iframe 中访问 iframe

问题描述

我有一个网页,它包含很少的 iframe,它有这样的 iframe,

<html>
<iframe name="frame1" id="frame1" src="https://example.com">

    <iframe name="frame2" id="frame2" src="https://def.com/sample1.jsp"></iframe>
    <iframe name="frame3" id="frame3" src="https://def.com/sample2.jsp"></iframe>

</iframe>
</html>

请注意,单击frame2上的按钮时会打开frame3。现在我需要调用一个从frame3加载了frame2的 javascript 函数。

很明显,第 2 帧和第 3 帧都来自同一个来源,所以我没想到会出现跨域帧问题。如何获取对 frame2 的引用并调用该函数?假设函数名称是doSomething()

我正在尝试,document.getElementById("frame2");但它给出了null。所以我认为可能有一种不同的方式来访问 iframe。有人可以帮忙吗?

标签: javascriptiframecross-domain

解决方案


您应该可以使用contentWindow来做到这一点。下面是一个示例(请注意,当在 SO 上作为 Snippet 运行时,这将产生相同的起源问题):

let iframe1 = document.getElementById("frame1").contentWindow;
let iframe2 = iframe1.document.getElementById("frame2");
let iframe3 = iframe1.document.getElementById("frame3");
<iframe name="frame1" id="frame1">
  <iframe name="frame2" id="frame2"></iframe>
  <iframe name="frame3" id="frame3"></iframe>
</iframe>


推荐阅读