javascript - 如何从父窗口访问 iframe 窗口变量?
问题描述
我正在尝试围绕 iframe 构建一个包装器,该包装器需要消耗 iframe 中的一些内容。
iframe 脚本将一些变量分配给 iframe 窗口,如下所示:
(function() {
window.courseData = "course data goes here..."
})(window);
然后父窗口正在访问 iframe 窗口:
document.addEventListener('DOMContentLoaded', () => {
const iframeWindow = document.getElementById("iframe").contentWindow;
console.log(iframeWindow); // Window about:blank > courseData {...}
})
当我在浏览器中查看控制台日志时,它会显示 iframe 窗口对象及其所有属性,包括 courseData 对象。但是,当我尝试直接访问 courseData 时,它返回 undefined ...
console.log(iframeWindow.courseData); // undefined
我一生都无法弄清楚为什么我可以看到它,但无法访问它。任何想法将不胜感激!
注意:不幸的是,我无法更改 iframe 的内容,因此我无法使用其他方法将数据传递给父级。
另一个注意事项:iframe 来自服务器上的同一目录,因此不存在任何跨源问题。
解决方案
因此,经过更多的反复试验,我自己弄清楚了!
对于任何对此感兴趣的人来说,在调用我的父函数时 iframe 窗口尚未完全加载,因此变量返回未定义。
解决方法是在调用该函数之前使用一个函数来检查 iframe 何时完成加载,为此我在另一个堆栈溢出帖子中找到了一些有用的代码:
推荐阅读
- java - 这是避免短路评估的好方法吗?
- python - 从N个点中可以找到多少个三角形,其中有N个点的质心?
- c++ - 如果将两个相同的指针作为输入传递,memcmp 会做什么?
- python-3.x - Python 的字节类型实际用于什么?
- css - 如何修复 mat-paginator 大小
- javascript - 用 Ajax 加载的 html 编写的 Dom 对象
- python - “django.core.exceptions.AppRegistryNotReady:尚未加载应用程序”尝试将数据加载到我的模型中
- reactjs - 如何在 React 组件库中独立使用和导出 scss?
- postgresql - 如何在 postgresql 中进行一些未经授权的登录尝试后锁定数据库用户帐户
- swift - Swift 包管理器在本地实用吗?