|
iframe中向父页面传递数据,并取得父页面中变量
在 HTML 中,使用 `<iframe>` 嵌入的页面可以通过 JavaScript 与父页面进行通信。以下是一个简单的示例,演示如何在 `iframe` 中向父页面传递数据,并从父页面中获取变量。
### 示例代码
#### 父页面 (parent.html)
- html
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>父页面</title>
- <script>
- // 定义一个变量
- var parentVariable = "这是父页面的变量";
- // 接收来自 iframe 的数据
- function receiveMessage(event) {
- // 确保消息来源是可信的
- if (event.origin !== "http://localhost:3000") {
- return;
- }
- console.log("接收到来自 iframe 的数据: ", event.data);
- }
- // 注册消息接收事件
- window.addEventListener("message", receiveMessage, false);
- </script>
- </head>
- <body>
- <h1>父页面</h1>
- <iframe src="iframe.html" width="600" height="400"></iframe>
- </body>
- </html>
复制代码
#### 子页面 (iframe.html)
- html
- <!DOCTYPE html>
- <html lang="zh-CN">
- <head>
- <meta charset="UTF-8">
- <title>子页面</title>
- <script>
- // 向父页面发送数据
- function sendMessageToParent() {
- var dataToSend = "这是来自 iframe 的消息";
- window.parent.postMessage(dataToSend, "*"); // "*" 可以替换为父页面的具体域名以增强安全性
- }
- // 获取父页面中的变量
- function getParentVariable() {
- // 通过 window.parent 访问父页面的变量
- var parentVariable = window.parent.parentVariable;
- console.log("父页面中的变量: ", parentVariable);
- }
- // 页面加载完成后发送消息和获取变量
- window.onload = function() {
- sendMessageToParent();
- getParentVariable();
- };
- </script>
- </head>
- <body>
- <h1>子页面</h1>
- </body>
- </html>
复制代码
### 代码说明
1. **父页面 (parent.html)**:
- 定义了一个变量 `parentVariable` 。
- 使用 `window.addEventListener` 监听来自子页面的消息。
- 在 `receiveMessage` 函数中处理接收到的数据。
2. **子页面 (iframe.html)**:
- 使用 `window.parent.postMessage` 向父页面发送消息。
- 通过 `window.parent` 访问父页面的变量 `parentVariable` ,并将其打印到控制台。
- 在页面加载完成时,调用 `sendMessageToParent` 和 `getParentVariable` 函数。
### 注意事项
- 在使用 `postMessage` 方法时,建议指定目标源(第二个参数),以增强安全性,避免潜在的跨站脚本攻击(XSS)。
- 确保父页面和子页面的源(协议、域名和端口)是相同的,或者在 `postMessage` 中正确处理跨域情况。
|
|