我有一个文字JS对象,可以创建和播放我的播放列表。 在HTML页面中,我有一个包含所有曲目的列表。 当我点击某些曲目时,一切正常,但当我在一首曲目中单击并等待曲目结束时,下一首曲目不会播放。 这是我的代码的一部分:
playSound : function(track){
console.log("Play this song");
DG_PLAYER.TrackPlaying = track;
soundManager.destroySound('MySoundID');
DG_PLAYER.Sound = soundManager.createSound({
id:'MySoundID',
url:track.sound,
autoLoad: true,
autoPlay: true,
onload: function() { console.log('sound loaded!', this); },
onfinish: function(){
console.log('end song');
var nextSong = DG_PLAYER.getNextSong();
DG_PLAYER.playSound(nextSong);
},
onfailure : function(){console.log('some error')},
whileloading : function(){console.log('i m loading');},
whileplaying : function(){console.log('i m playing');}
});
},
如果我更改onfinish事件的行,如下所示: setTimeOut(function(){DG_PLAYER.playSound(nextSong);},2000)它工作正常。 有人可以帮助我吗?
另外一件事,当第一首歌曲结束并调用播放下一首歌曲时,未加载曲目(没有来自onload事件的消息)。 谢谢,抱歉我的英语不好。 甲
好的, 我尝试在设置上添加“flashVersion:9”,这解决了问题但是在IE 8上我现在有了动作脚本消息。答案 0 :(得分:1)
From SoundManager2's Revision History:
Adobe于2013年2月26日发布的Flash Player 11.6.602.171引入了SM2默认的Flash 8(flashVersion:8)基于API的JS / Flash交互的问题,其中SM2方法从回调中调用,如{{ 1}}不起作用。这主要打破了用于按顺序播放声音,连续加载一系列声音等的方法。 (有关详情,请参阅discussion。)
请注意,这不会影响使用
onfinish()
的情况;但是,SM2默认使用soundManager.setup({ flashVersion: 9})
。具体来说,Flash启动的事件(例如声音整理)会使Flash - > JS调用SM2 API,后者调用用户指定的事件处理程序。如果用户指定的SM2
flashVersion: 8
处理程序立即调用像play()这样生成JS的SM2方法 - > Flash调用,此调用无声地失败或被阻止。如果其SWF是针对Flash 8 API构建的,那么使用类似回调模式的其他JS + Flash库也可能会受到影响。怀疑时间或递归/堆栈问题,发现
onfinish()
引入用户指定的SM2回调,如setTimeout(callback, 0)
恢复顺序/播放列表功能。Flash Player 11.6.602.180,由Adobe于2013年3月12日发布,表现出相同的行为。为了避免额外的攻击,SM2将此应用于所有基于Flash 8的API回调,无论安装的是什么版本的Flash Player。由于这种变化,预计不会出现回归。
或者,使用
onfinish()
可以避免此问题,因为基于Flash 9的API似乎没有此问题。