优化重复播放音频触发机制

This commit is contained in:
example 2019-03-30 08:39:24 +08:00
parent d9655a1145
commit b48debd84c

View File

@ -1,7 +1,7 @@
// ==UserScript== // ==UserScript==
// @name 划词翻译:多词典查询 // @name 划词翻译:多词典查询
// @namespace http://tampermonkey.net/ // @namespace http://tampermonkey.net/
// @version 3.8 // @version 3.9
// @description 划词翻译调用“有道词典有道翻译、金山词霸、Bing 词典必应词典、剑桥高阶、沪江小D、谷歌翻译” // @description 划词翻译调用“有道词典有道翻译、金山词霸、Bing 词典必应词典、剑桥高阶、沪江小D、谷歌翻译”
// @author https://github.com/barrer // @author https://github.com/barrer
// @match http://*/* // @match http://*/*
@ -128,7 +128,7 @@
// 发音引擎 // 发音引擎
var audioEngines = []; // [{name: 'abc', url: 'http://*.mp3', ...}, ...] var audioEngines = []; // [{name: 'abc', url: 'http://*.mp3', ...}, ...]
// 发音缓存 // 发音缓存
var audioCache = {}; // {'mp3 download url': Audio} var audioCache = {}; // {'mp3 download url': blob}
// 翻译引擎结果集 // 翻译引擎结果集
var engineResult = {}; // id: DOM var engineResult = {}; // id: DOM
// ID 类别 // ID 类别
@ -756,15 +756,15 @@
} }
/**发音*/ /**发音*/
function play(obj) { function play(obj) {
var audio = new iframeWin.Audio();
if (obj.url in audioCache) { // 查找缓存 if (obj.url in audioCache) { // 查找缓存
log('audio in cache', obj, audioCache); log('audio in cache', obj, audioCache);
audioCache[obj.url].play(); audio.src = createObjectURLWithTry(audioCache[obj.url]);
return; audio.play(); // 播放
} } else {
var audio = new iframeWin.Audio();
ajax(obj.url, function (rst, res) { ajax(obj.url, function (rst, res) {
audio.src = createObjectURLWithTry(res.response); audio.src = createObjectURLWithTry(res.response);
audioCache[obj.url] = audio; // 放入缓存 audioCache[obj.url] = res.response; // 放入缓存
audio.play(); // 播放 audio.play(); // 播放
}, function (rst) { }, function (rst) {
log(rst); log(rst);
@ -772,6 +772,7 @@
responseType: 'blob' responseType: 'blob'
}); });
} }
}
/**得到发音按钮*/ /**得到发音按钮*/
function getPlayButton(obj) { function getPlayButton(obj) {
var type = document.createElement('a'); var type = document.createElement('a');