应用场景:需要接受对方发给自己的音频,但是自己现在不在网页,当有时间的时候可以看到这些没有读的消息(多个页面切换跳转,网页版聊天关闭页面就会断掉连接),需要websql暂时存到浏览器中。
问题:存的音频url不能直接用audio播放,但是转化成blob(环信自己的方法)的也不能播放。后来发现,环信是将音频下载到本地在播放(此时是blob),但是一旦重新加载js,blob就不能播放了。
解决方案:将接受音频的message转化成jsonstr存入websql中,需要从websql中取出的时候,将message转化成object,然后调用环信的下载方法。
部分代码:
//easemobwebim-sdk收到音频消息回调方法的实现
var handleAudioMessage = function(message) {
var str=JSON.stringify(message);//转化成jsonstr
insert(message.from, "xx",getLoacalTimeString() ,str);//存入websql中
};
//下载音频到本地(先从websql中取出这个message str:data)
var options=JSON.parse(data);console.log(options);//将websql中的message的str转化成object
options.onFileDownloadComplete = function(response, xhr) {
var objectURL = Easemob.im.Helper.parseDownloadResponse.call(this, response);
if (Easemob.im.Helper.getIEVersion != 9 && window.Audio) {
audio.onload = function() {
audio.onload = null;
window.URL && window.URL.revokeObjectURL && window.URL.revokeObjectURL(audio.src);
};
audio.onerror = function() {
audio.onerror = null;
};
console.log();
audio.src = objectURL;//音频此时是可以播放的了
}
};
options.onFileDownloadError = function(e) {
};
options.headers = {
"Accept" : "audio/mp3"
};
Easemob.im.Helper.download(options);
}