外观
外观
耶温
664字约2分钟
2024-08-14
Web Messaging 是一种浏览器 API,允许不同的窗口、标签页、iframe 或者 Web Worker 之间进行安全的消息传递。它主要用于在不同的上下文之间传递数据,确保信息的安全性和有效性。
postMessage()
:用于发送消息到目标上下文。可以在发送消息时指定目标窗口和消息内容。// 在发送方窗口中
const targetWindow = document.getElementById('myIframe').contentWindow;
targetWindow.postMessage('Hello, iframe!', 'https://example.com');
message
事件:用于接收消息。接收方可以监听 message
事件来处理接收到的消息。// 在接收方窗口中
// 在接收方窗口中
window.addEventListener('message', (event) => {
// 验证消息来源
if (event.origin === 'https://example.com') {
console.log('Received message:', event.data);
}
});
// 在主页面中
const iframe = document.getElementById('myIframe');
iframe.contentWindow.postMessage('Hello from parent!', 'https://another-domain.com');
// 在 iframe 中
window.addEventListener('message', (event) => {
if (event.origin === 'https://example.com') {
console.log('Message from parent:', event.data);
}
});
// 在标签页 A 中
window.postMessage('Hello from tab A', 'URL_ADDRESS');
// 在标签页 B 中
window.addEventListener('message', function(event) {
if (event.origin === 'URL_ADDRESS') {
console.log('Message from tab A:', event.data);
}
});
// Worker A
self.onmessage = function(event) {
const result = event.data * 2; // 进行计算
// 发送结果给 Worker B
self.postMessage(result);
};
// Worker B
const workerA = new Worker('workerA.js');
const workerB = new Worker('workerB.js');
workerA.onmessage = function(event) {
console.log('Received from Worker A:', event.data);
// 发送数据给 Worker B
workerB.postMessage(event.data);
};