Vue之前端Broadcast Channel API的简单使用

前端Broadcast Channel API的简单使用

Broadcast Channel API 是一个用于在不同窗口或标签页之间进行通信的 API。它允许一个页面向另一个页面发送消息,这些页面可以在同一浏览器实例中打开,或者在不同的浏览器实例中打开。

以下是 Broadcast Channel API 的简单使用步骤:
1.创建广播频道: 在发送消息的页面中,首先需要创建一个 Broadcast Channel,可以使用 new BroadcastChannel(channelName) 构造函数。channelName 是频道的名称,所有使用相同名称的页面都能收到彼此的消息。

// 发送消息的页面
const channel = new BroadcastChannel('myChannel');

2.发送消息: 通过广播频道发送消息。可以使用 postMessage 方法来发送任意数据。

// 发送消息的页面
const message = 'Hello from Page 1!';
channel.postMessage(message);

3.接收消息: 在接收消息的页面中,同样需要创建一个同名的广播频道,并通过 addEventListener 监听消息事件。

// 接收消息的页面
const channel = new BroadcastChannel('myChannel');
//使用方法一:
handleMessage(event) {
   
  console.log('Received message:', event.data);
}
channel.addEventListener('message', handleMessage);
//使用方法二:
bc.onmessage = (event) => {
   
 console.log('Received message:', event.data);
};

4.关闭频道: 当不再需要广播频道时,最好在页面关闭或不再需要通信的时候移除监听器,以释放资源。
切记最好在页面关闭或不再需要通信的时候移除监听器,否则重新进入页面时会再次创建一个监听器,上次创建的监听器还存在,这样的话每次进入页面都会创建一个。

//方式一的移除
bc.onmessage=null;
//方式二的关闭和移除
channel.close();
channel.removeEventListener('message', handleMessage);

请注意,使用 Broadcast Channel API 的两个页面必须在同一协议(http 或 https)下,否则无法进行通信。此外,同一页面打开多个标签页也可以通过 Broadcast Channel 进行通信。

这是 Broadcast Channel API 的基本用法,你可以根据需要在不同页面之间传递更复杂的数据。这对于在单页应用程序中或多个窗口之间共享状态非常有用。

5.完整示例
(1)发送消息的页面:

<template>
  <div class="app-container">
  		<input type="text" v-model="message" placeholder="请输入要发送的消息">
        <button @click="sendMessage">发送</button>
  </div>
</template>
<script>
export default {
   
	data() {
   
    	return {
   
    		message: ""
    	};
    },
    methods: {
   
        sendMessage() {
   
          // 创建一个名为 "example-channel" 的 Broadcast Channel
          const channel = new BroadcastChannel('example-channel');
          // 发送消息到频道
          channel.postMessage(this.message);
          // 发送完消息后关闭频道
          channel.close();
          // 清空消息输入框
          this.message = '';
        }
    }
}
</script>

(2)接收消息的页面:

<template>
  <div class="app-container">
  		<p>接收到的消息: {
   {
    receivedMessage }}</p>
  </div>
</template>
<script>
export default {
   
	data() {
   
    	return {
   
    		receivedMessage: ""
    	};
    },
    methods: {
   
        handleReceivedMessage(event) {
   
          this.receivedMessage = event.data;
        }
    },
    mounted() {
   
        const channel = new BroadcastChannel('example-channel');
        // 添加事件监听器
        channel.addEventListener('message', this.handleReceivedMessage);
    },
    beforeDestroy() {
   
        const channel = new BroadcastChannel('example-channel');
        // 移除事件监听器
        channel.removeEventListener('message', this.handleReceivedMessage);
    }
}
</script>

在这个示例中,我们在Vue实例的 mounted 生命周期钩子中使用 addEventListener 添加了一个名为 “example-channel” 的 Broadcast Channel 的 message 事件监听器。在 beforeDestroy 钩子中,我们使用 removeEventListener 移除了相同的事件监听器,以避免在组件销毁时引起内存泄漏。

这种方式相对于直接使用 channel.onmessage 更符合 Vue 组件的生命周期管理,确保在组件销毁前正确地移除了事件监听器。

文章参考:
vue一个页面改变cookie的值,另一个页面怎么同步监测cookie值的变化,并更新页面数据

相关推荐

  1. Vue前端Broadcast Channel API简单使用

    2024-02-01 07:54:03       68 阅读
  2. vue简单使用五(组件使用

    2024-02-01 07:54:03       34 阅读
  3. 前端基础 keep-alive使用(Vue)

    2024-02-01 07:54:03       64 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-01 07:54:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-01 07:54:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-01 07:54:03       82 阅读
  4. Python语言-面向对象

    2024-02-01 07:54:03       91 阅读

热门阅读

  1. Day05-Linux bash核心介绍及目录命令讲解

    2024-02-01 07:54:03       54 阅读
  2. 消息队列和Kafka

    2024-02-01 07:54:03       60 阅读
  3. ubuntu 系统切换root用户

    2024-02-01 07:54:03       52 阅读
  4. npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED

    2024-02-01 07:54:03       60 阅读
  5. unity(WebGL) 把截图保存下载到本地

    2024-02-01 07:54:03       59 阅读