如何实现酷狗音乐pc页面点击播放时,打开多个歌曲播放时,始终在一个播放页面,(标签页的通讯)

大致有两种思路,

一种是通过wind.open()方法传第二个参数,

A页面:

//点击跳转播放页函数function toPlayPage(){window.open('path/xxxx/xxxx?name=音乐名','music')//第二个参数写一个定值,代表跳转页面都为music标签页,就可以实现点击多次播放页只在一个播放页里面播放
}

B页面:

mountend:{
const params = new URLSearchParams(location.search)
let querry= params.get('name')//拿到a页面跳转过来传递的参数
}function play(){}

这种方式有个弊端,就是每次点击播放页,总是会刷新播放页,并不是很好,而酷狗播放页并不是刷新而是跳转过来直接就是播放。

第二种就是创建一个通信频道broadcastChannel

这种方式有两个前提条件,一个是必须同源,一个是必须通道名相同

A页面:

const channel= new BroadcastChannel ('music')if(有标签页的时候再去发送消息){
channel.postMessage('音乐名') //向b页面发送信息
}

这里需要有个细节需要当有标签页时候再去发送消息,因为一开始肯定是没有播放的标签页的,所以有两个思路去:

第一种是利用同源所以localStorage是共享的这个原理去做,第一打开播放页时候就本地存个值(比如设置已打开标签页的数量),播放页关闭的时候去掉这个值。 发送消息时候去判断是否有标签页,但是这种方法有个弊端就是localStorage是很容易被篡改的,不太好

第二种是 b页面也是可以给a页面发送消息,当b页面被打开时候,往a页面去发送消息,表示标签页被打开,然后a页面去管理这个状态,从而识别标签页是否被打开。

B页面:

const channel= new BroadcastChannel ('music')channel.addEventListener('message',(e)=>{console.log(e.data) // 获取到其他同源标签页同名频道发来的消息
})

关闭监听的方法:

  • 一种方式是取消或者修改相应的'message'事件监听
  • 另一种简单的方式就是使用 Broadcast Channel 实例为我们提供的close方法。
channel.close();

两者是有区别的:

取消'message'监听只是让页面不对广播消息进行响应,Broadcast Channel 仍然存在;而调用close方法这会切断与 Broadcast Channel 的连接,浏览器才能够尝试回收该对象,因为此时浏览器才会知道用户已经不需要使用广播频道了。

在关闭后调用postMessage会出现如下报错

 如果之后又再需要广播,则可以重新创建一个相同 name 的 Broadcast Channel。

标签页之间的信息通讯有很多种场景和方式,可以看我这篇文章前端跨页面交互信息或传递信息都有这么几种方式,总有一个满足你的使用场景

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LOGO设计

一、什么是LOGO: 是用一种特殊文字或图像组成的大众传播符号,是人们相互交流的一种视觉语言。 二、LOGO的特征: 1.识别性 2.领导性 3.同一性 4.涵盖性 5.革新性 三、LOGO的格式: 1.为了便于以后更改:ai cdr eps 2.在使…

Redis进阶之内存模型

转载自 Redis进阶之内存模型 前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符…

React中jsx的规则

jsx语法规则:1.定义虚拟DOM时,不要写引号。2.标签中混入JS表达式时要用{}。3.样式的类名指定不要用class,要用className。4.内联样式,要用style{{key:value}}的形式去写。5.只有一个根标签6.标签必须闭合7.标签首字母(1).若小写字…

C#将引入可空的引用类型

是的,标题没错。C#其中一份新提案假定,所有的引用类型在默认情况下都是不可空的。在新语法下,你需要显式地标明一个引用变量是可空的,就像对值类型所做的那样。 和值类型一样,T是指不可空类型,而T?是指可…

Android中SlidingDrawer开发报错You need to use a Theme.AppCompat theme (or descendant) with this activity.

Android抽屉开发报错You need to use a Theme.AppCompat theme (or descendant) with this activity. 方法1: 创建的activity时,如果不是那么强烈需要继承自AppCompatActivity,就直接继承Activity。 如将activity继承自AppCompatActivity&…

特效字的设计

一、文字的属性: 1.字体:楷体、宋体、行书、小篆 2.字号:14px 16px 20px 3.颜色:red green 4.特殊属性:文字的粗体和斜体 二、特效字的表现形式 1.文字笔画的变形 2.文字的变化与对比 3.文字的特殊材质 4.综合形式 三、…

Redis进阶之持久化

转载自 Redis进阶之持久化 一、Redis高可用概述 在介绍Redis高可用之前,先说明一下在Redis的语境中高可用的含义。 我们知道,在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务&am…

React遍历数组

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>jsx小练习</title> </head> <body><!-- 准备好一个“容器” --><div id"test"></div><!-- 引入rea…

未来的.NET之多重继承

通过抽象接口引入有限形式的多重继承&#xff0c;这一.NET新提议颇具争议性。该特性是受Java默认方法&#xff08;Default Methods&#xff09;的启发。 默认方法的目的在于允许开发人员修改已发布的抽象接口。修改已发布接口将会产生破坏性的更改&#xff0c;因此在Java和.NE…

Android build.gradle(app)介绍

/**首先第一行应用了一个插件&#xff0c;一般有两个值可选&#xff0c;com.android.application表示这是一个应用程序模块&#xff0c;* com.android.library表示这是一个库模块。应用模块和库模块的最大区别是&#xff1a;一个是可以直接运行的&#xff0c;一个只能做为代码库…

React中的方法调用

onClick{demo}//可以调用函数 onClick{demo()}//返回的是undefide

企业级负载均衡如何实现

转载自 企业级负载均衡如何实现 负载均衡简介 首先&#xff0c;我们来了解一下什么是负载均衡&#xff1a; 在一个大型网站中&#xff0c;在线用户有时可能有几千个甚至上万个之多。如果一个用户的请求需要服务使用0.02秒来处理&#xff0c;那么该服务实例每秒钟将只能处理…

C#语法快速热身

一、C#中的条件语句&#xff1a; 1.if(条件){ //代码 }else{ //代码 } 2.多重if: if(条件){ //代码 }else if(条件){ //代码 }else{ //代码 } 3.嵌套if if(条件){ if(条件){ //代码 }else{ //代码 } }else { //代码 } 4.switch结构&#xff1a; switch(整型、字符串){ case 1: …

微服务架构师的职责——《微服务设计读书笔记》

如何定义架构师 架构师从英文单词Architect翻译而来&#xff0c;在英文中&#xff0c;Architect原来的意思是“建筑师”。作者吐槽英文中架构师与传统的建筑师单词相同&#xff0c;但实际的工作性质并不相同&#xff0c;以致于在英文的语境中会造成理解上的差异。 传统的建筑师…

Android RaingBar评分条的使用

概述 RatingBar是基于SeekBar和ProgressBar的扩展&#xff0c;用星型来显示等级评定。使用RatingBar的默认大小时&#xff0c;用户可以触摸/拖动或使用键来设置评分&#xff0c;它有两种样式(小风格用ratingBarStyleSmall&#xff0c;大风格用ratingBarStyleIndicator)&#x…

使用属性升级MyBank

一、访问修饰符&#xff1a; 1.public :不受任何限制&#xff0c;访问级别最高 2.private:只有类的内部可以使用&#xff0c;访问级别最低 二、this关键字&#xff1a; 指的是当前对象本身&#xff0c;通过this可以引用当前类成员变量和方法。使用this可以解决成员变量和局部变…

理解C# 4 dynamic(1) - var, object, dynamic的区别以及dynamic的使用

一. 为什么是它们三个? 拿这三者比较的原因是它们在使用的时候非常相似。你可以用它们声明的变量赋任何类型的值。 看看下面的示例: var a 1;object b 1; dynamic c 1; 你还可以使用关键字为它们赋上更加复杂的类型 var a new string[]{"1"};object b new …

什么是缓存击穿

转载自 什么是缓存击穿 缓存击穿、缓存并发和缓存雪崩是常见的由于并发量大而导致的缓存问题&#xff0c;本节讲解其产生原因和解决方案。 缓存击穿通常是由恶意攻击或者无意造成的&#xff1b;缓存并发是由设计不足造成的&#xff1b;缓存雪崩是由缓存同时失效造成的&…

获取笔记本的SHA1的值。

开发Android几年来&#xff0c;经常出现这样的情况&#xff0c;每次使用到地图的时候&#xff0c;不知道如何获得笔记本的SHA1值&#xff0c;尤其是在跟换笔记本开发的时候。 因此在CSDN上做一下笔记&#xff01; 进入cmd模式 cd C:\Users\Administrator.android> 输入keyto…