最近研究在Firefox下使用Media Player,发现一些问题,至今没有解决,不知道哪里能够找到合理的解释,大家提供一下。
在Firefox如果需要使用COM组件的话,需要下载一个Mozilla Active Plug-in,这个没有问题,但是在Firefox下使用Media Player需要处理PlayStateChange这个事件的话,着实费了一番周折,因为playerObj.addEventListener这样的写法,无法正确捕获事件,必须使用<script for=”playerObj” event=”PlayStateChange”>…</script>这样的方法,举个例子:
<![if !IE]>
<script for=”wplayer” event=”PlayStateChange(newState)”>
player._fireEvent(’onEngineStateChanged’,player.getState());
</script>
<![endif]>
这样写,是为了兼容Firefox的情况下,在IE下依旧使用attachEvent这样的原生解决方案来挂接事件.这样做以后,似乎我们已经可以正确的捕获事件了,可是问题才刚刚开始,因为在Firefox下面,每个PlayStateChange事件会重复触发4次,也就是说,我们在事件处理函数里面会重复4次得到同一个状态,这和IE是截然不同的。这就是在Firefox下处理ActiveX Object event的噩梦吗?
这样的问题出现在国内一个知名的网络音乐服务8Box中,使用Firefox听歌的时候,一首歌完成之后会向后跳4首歌,无法正确持续播放整个列表,原因是页面中的js相应PlayState code = 8(Media end)的时候接到连续4次event notification,正常的处理逻辑是Media end时向下跳一首歌,可是由于事件接受次数的异常,导致了这个原因,还有相同的问题也出现在每开始播放一首新歌的时候都会到服务器取4次歌曲的信息,呵呵,可能这个也是他们无法解决的问题吧。究竟怎样做才能雅观的解决这个问题呢?我可不想在响应每个状态的时候都使用一下计数器这种恶心的方法。
Technorati: javascript, ajax, mozilla, WMP, activeX plug-in
问题解决了吗?我现在也遇到同样的问题!
Firefox里:
playerObj.addEventListener()不起作用.
我用的方式也不行.
晕倒..
评论 由 wildwind — 十一月 15, 2006 @ 5:23 pm
Firefox 中使用如下方式可以捕获wmp的事件:
player._fireEvent(’onEngineStateChanged’,player.getState());
似乎文中的问题是无法解决的!
评论 由 数码幽灵 — 十一月 16, 2006 @ 10:49 am
使用计数器不一定是恶心的方法:在响应状态改变的时候设置一个全局变量,比如bMediaEnd=true;设置一个全局计数器,轮巡检查bMediaEnd的值,如果为true就播放下一首曲子,然后把bMediaEnd重置为false。这个全局计数器可以有很多用途,比如更新播放时间,更新歌词,更新播放状态等等。以大约100毫秒的速度轮巡几乎不占用多少额外的系统开销,而且用途越多,相对效率就越高
评论 由 Alvan — 十一月 29, 2006 @ 6:24 pm