javascript - 如何在另一个 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。有人可以帮忙吗?
解决方案
您应该可以使用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>
推荐阅读
- java - 在 Java 中从 Newtonsoft.Json 解析 JSON 时出现 JSON 问题
- r - 用 geom_bar 打破 ggplot2 中的 y 轴
- django - 无法在 Django 模型中检索令牌
- strapi - 如何通过代码配置 Strapi 内容类型“元数据”(可见/可编辑/布局)
- machine-learning - CNN的卷积层需要多少个神经元?
- dialogflow-es - 如何从显示轮播的意图向处理轮播的意图传递除选项以外的一个参数?
- azure - 使用开始日期和结束日期执行 azure data factory foreach 活动
- php - Symfony 5 - 捆绑“WebProfilerBundle”不存在或未启用
- php - 使用不同于密码的字段对 HTTP Basic 进行身份验证
- kotlin - SQLDelight:Kotlin Multiplatform App 中未解决的参考 AndroidSqliteDriver