日期:2014-05-16  浏览次数:20335 次

有没有办法控制同域名下的其他页面(非父--子)?请教下音乐播放器只同时打开一个的问题
项目需要做一个类似的播放器.要求是多次点击只能往一个已打开的播放页面添加歌曲,不能不同的页面点击一次就打开一个新的播放窗口.

晚上回家研究了一下,发现百度音乐是属于在A页面打开窗口后B后,只能A页面点击不同的音乐都在B窗口切换,如果新建一个空白页面然后手动输入地址再访问,因为这个新地址不是现有的B窗口的父页面,所以不能控制,点击后会打开一个新的播放窗口页面.


QQ音乐的则比较有趣.它是通过cookie实现的..举例:
先试听了A和B两首歌曲,这时候打开一个新的页面,页面加载后播放音乐C,再回到先开始的页面,播放D.这时候全部关闭后,新打开一个页面,播放列表里的是ABD这3首歌.应该是页面的播放器在执行播放动作时,会把当前页面播放器的播放列表存入COOKIE,从而覆盖了别的页面的播放器列表.

但是其中有个功能是我想要实现的,就是甲页面的播放器正在播放,而如果乙页面的播放器点击播放后,会自动让甲页面的播放器暂停.


另外,虾米网的音乐播放器,则完全实现了不管页面如何在新标签还是新窗口打开,甚至复制标签,都能指向同一个已有的播放器页面,而不会打开新的

当时白天在公司开会的时候,我的思路是播放器页面用一个setInterval不断向服务器发送一个ajax请求,判断session里保存的播放列表,或者说一些定义好的动作参数,来决定页面的具体动作.

但是这个存在一个通信延时的问题.

晚上看到QQ用的是cookie,正好提醒了我,不需要用ajax请求而直接每次去cookie里读取一些控制参数.

不知道各位对这个方案有什么看法没有?希望大家不吝赐教


另外, 也想请教下各位,QQ播放器刚才描述的,乙页面播放的同时甲页面的停止,是不是用的JS来控制其他的页面的方法?

因为印象中JS只能控制由自己打开的页面. JS水平有限,如果说错了还请各位海涵.

如果不能的话,是不是每个页面生成一个类似于令牌的字符串,同样通过cookie,乙页面有播放请求了的话,去cookie里将一个比如叫"current_player"的值换成自己的令牌,其他页面的播放器在读取cookie一旦发现这个值被替换成了非自己令牌的内容的话,停止自己的播放动作.


这样的话涉及到一个js读取cookie效率的问题,这样的方案是否合理?

一直以来从来没法过帖,分很少,希望各位见谅.

------解决方案--------------------
1:如果你想要的是当前有播放页,然后用户又选择了新歌曲播放时,要求在原有播放页打开。则链接中加上target='_play'即可
HTML code
<a href='对应的播放页地址' target='_play'>歌曲1</a>
<a href='对应的播放页地址' target='_play'>歌曲2</a>
<a href='对应的播放页地址' target='_play'>歌曲3</a>
……
<a href='对应的播放页地址' target='_play'>歌曲n</a>