Skip to content

postMessage 是如何解决跨域问题的?

Posted on:2024年8月14日 at 12:15

postMessage 是一种在不同源(域)之间进行安全通信的机制,可以解决跨域问题。以下是 postMessage 解决跨域问题的原理及其使用方式:

1. 原理

postMessage 方法 允许跨源通信,即使这些源在不同的域名、协议或端口下。这是通过以下方式实现的:

2. 使用 postMessage 的步骤

1. 发送消息

使用 postMessage 方法可以向目标窗口发送消息。消息可以是任何数据类型,如字符串、对象等。

示例代码

// 在发送消息的窗口中
const targetWindow = document.getElementById("myFrame").contentWindow;
const message = { type: "greeting", text: "Hello from parent" };

// 发送消息,指定目标窗口的 origin
targetWindow.postMessage(message, "https://example.com");

2. 接收消息

在接收消息的窗口中,需要设置事件监听器来接收和处理消息。message 事件对象包含了消息的内容、来源和其他信息。

示例代码

// 在接收消息的窗口中
window.addEventListener("message", (event) => {
  // 检查消息的来源
  if (event.origin !== "https://example.com") {
    return; // 忽略来自不可信源的消息
  }

  // 处理接收到的消息
  console.log("Message received:", event.data);
});

3. 安全注意事项

原文转自:https://fe.ecool.fun/topic/6843e240-9534-4371-8b64-ba76b4aa8ed4