ZBLOG

javascript postMessage函数用法示例

postMessage 是一个用于在不同上下文(如主线程与 Web Worker 之间,或多个 iframe 之间)发送消息的方法。它可以在发送方和接收方之间进行异步通信。

以下是几个示例,展示了如何使用 postMessage 函数。

示例 1:主线程与 Web Worker 之间的通信

主线程代码 (main.js)

  1. // 创建一个新的 Worker 实例
  2. const worker = new Worker('worker.js');
  3. // 设置接收消息的事件监听器
  4. worker.onmessage = function(event) {
  5. console.log('Received from worker:', event.data);
  6. };
  7. // 向 Worker 发送消息
  8. worker.postMessage('Hello, Worker!');

Web Worker 代码 (worker.js)

  1. // 接收来自主线程的消息
  2. self.onmessage = function(event) {
  3. console.log('Received from main thread:', event.data);
  4. // 回送一条消息到主线程
  5. self.postMessage(`Worker received: ${event.data}`);
  6. };

示例 2:iframe 与父窗口之间的通信

父窗口代码 (parent.html)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Parent Window</title>
  6. </head>
  7. <body>
  8. <h1>Parent Window</h1>
  9. <iframe id="myFrame" src="child.html"></iframe>
  10. <script>
  11. const iframe = document.getElementById('myFrame');
  12. // 设置接收消息的事件监听器
  13. window.addEventListener('message', function(event) {
  14. console.log('Received from iframe:', event.data);
  15. });
  16. // 向 iframe 发送消息
  17. iframe.contentWindow.postMessage('Hello, Child!', '*');
  18. </script>
  19. </body>
  20. </html>

子窗口代码 (child.html)

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Child Iframe</title>
  6. </head>
  7. <body>
  8. <h1>Child Iframe</h1>
  9. <script>
  10. // 接收来自父窗口的消息
  11. window.addEventListener('message', function(event) {
  12. console.log('Received from parent:', event.data);
  13. // 回送一条消息到父窗口
  14. event.source.postMessage(`Child received: ${event.data}`, event.origin);
  15. });
  16. </script>
  17. </body>
  18. </html>

注意事项

  1. 安全性:在实际应用中,应确保只接受来自可信源的数据。在 postMessage 的第二个参数中指定目标源,以限制只有特定来源可以接收到该信息。

    1. targetWindow.postMessage(message, 'https://trusted-source.com'); // 指定目标源
  2. 数据类型:通过 postMessage 可以传递基本数据类型和对象,但注意不能直接传递 DOM 元素或函数,因为它们不是可序列化的。

  3. 异步处理:使用 postMessage 时,它是异步操作,接收方需要注册事件监听器来处理收到的信息,因此会存在一定延迟。

以上示例展示了如何利用 postMessage 在不同执行上下文之间进行通讯,是理解 JavaScript 中多线程及跨域通讯的重要部分。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=22241

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?