javascript - 无法访问 DOM
问题描述
I am trying to load HTML markup from a separate file placed in the same directory. To achieve that, I am following this article: HTML Includes That Work Today.
I have two files with the following contents:
page2.html
:
<html>
<style>
div {
display: inline-block;
background-color: #0902;
border: 2px solid green;
border-radius: 10px;
padding: 20px;
font-size: 1.2em;
}
</style>
<body>
<div id="x">Contents</div>
</body>
</html>
test.html
:
<html>
<body>
<iframe src="page2.html" style="display: none;" onload="alert('onload event called'); this.before(this.contentDocument.body.children[0]); this.remove();"></iframe>
</body>
</html>
I want the contents of page2.html
to get appended to the current document. But, I am getting:
Uncaught TypeError: Cannot read property 'body' of null
at HTMLIFrameElement.onload (test.html:10)
What mistake have I made?
解决方案
这是一个跨域问题。
框架不允许您访问不同来源的页面的 DOM。
当您从本地文件打开 HTML 文档时,Chrome 会报告您看到的错误。
本地文件总是被视为不同的来源(想象一下,如果有人通过电子邮件向您发送 HTML 文档,您双击它,您的电子邮件客户端将其保存到本地文件并在浏览器中打开,然后开始从硬盘读取文件并将它们发送到电子邮件的发件人)。
您需要通过 HTTP 访问这些文档。
推荐阅读
- python - python numpy创建数据集列:仅根据条件添加值,否则为null
- excel - 如何根据具有可变位置的另一个单元格设置单元格值
- reactjs - 如何使用 React 测试库测试 Material UI 选择组件
- python - 在 Python (Selenium) 中从 CSV 文件读取和写入变量
- reactjs - 无法从 Spring Boot 应用程序在浏览器中设置 HTTP Cookie
- css - 使用 CSS 网格重复模拟内联块,但防止占用未使用的空白
- data-science - 这个 P 论点有什么问题
- javascript - 如何让 babel-node 将 Workers 引用的文件转换为 commonjs?(就像 babel 一样)
- php - 想要将 quickbooks 桌面与 php 集成
- firebase - Firebase 实时数据库连接作为流可以保持多长时间?