翻译引擎时间序校验
This commit is contained in:
parent
b177625e13
commit
c3cba21bc3
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name 划词翻译:多词典查询
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 2.4
|
||||
// @version 2.5
|
||||
// @description 划词翻译调用“有道词典(有道翻译)、金山词霸、Bing 词典(必应词典)、剑桥高阶、沪江小D、谷歌翻译”
|
||||
// @author https://github.com/barrer
|
||||
// @match http://*/*
|
||||
|
@ -450,13 +450,13 @@
|
|||
var iframeWin = null;
|
||||
var iframeDoc = null;
|
||||
iframe.style.display = 'none';
|
||||
// 翻译图标、内容面板、翻译内容列表、当前选中文本、当前翻译引擎、当前翻译面板内容列表数组
|
||||
var icon = document.createElement('tr-icon'),
|
||||
content = document.createElement('tr-content'),
|
||||
contentList = document.createElement('div'),
|
||||
selected,
|
||||
engineId,
|
||||
idsType;
|
||||
var icon = document.createElement('tr-icon'), //翻译图标
|
||||
content = document.createElement('tr-content'), // 内容面板
|
||||
contentList = document.createElement('div'), //翻译内容结果集(HTML内容)列表
|
||||
selected, // 当前选中文本
|
||||
engineId, // 当前翻译引擎
|
||||
engineTriggerTime, // 引擎触发时间(milliseconds)
|
||||
idsType; // 当前翻译面板内容列表数组
|
||||
// 初始化内容面板
|
||||
var largeHeight = document.createElement('div'); // 防止滚动条闪来闪去
|
||||
largeHeight.style.height = '10000px';
|
||||
|
@ -525,66 +525,66 @@
|
|||
})(),
|
||||
engines: (function () {
|
||||
var obj = {};
|
||||
obj[ids.ICIBA] = function (text) {
|
||||
obj[ids.ICIBA] = function (text, time) {
|
||||
ajax('http://open.iciba.com/huaci_v3/dict.php?word=' + encodeURIComponent(text), function (rst) {
|
||||
engineResult[ids.ICIBA] = parseIciba(rst);
|
||||
putEngineResult(ids.ICIBA, parseIciba(rst), time);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.ICIBA] = htmlToDom('error: 无法连接翻译服务');
|
||||
putEngineResult(ids.ICIBA, htmlToDom('error: 无法连接翻译服务'), time);
|
||||
showContent();
|
||||
});
|
||||
};
|
||||
obj[ids.ICIBA_LOWER_CASE] = function (text) {
|
||||
obj[ids.ICIBA_LOWER_CASE] = function (text, time) {
|
||||
ajax('http://open.iciba.com/huaci_v3/dict.php?word=' + encodeURIComponent(text.toLowerCase()), function (rst) {
|
||||
engineResult[ids.ICIBA_LOWER_CASE] = parseIciba(rst);
|
||||
putEngineResult(ids.ICIBA_LOWER_CASE, parseIciba(rst), time);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.ICIBA_LOWER_CASE] = htmlToDom('error: 无法连接翻译服务');
|
||||
putEngineResult(ids.ICIBA_LOWER_CASE, htmlToDom('error: 无法连接翻译服务'), time);
|
||||
showContent();
|
||||
});
|
||||
};
|
||||
obj[ids.YOUDAO] = function (text) {
|
||||
obj[ids.YOUDAO] = function (text, time) {
|
||||
ajax('http://dict.youdao.com/jsonapi?xmlVersion=5.1&jsonversion=2&q=' + encodeURIComponent(text), function (rst) {
|
||||
engineResult[ids.YOUDAO] = parseYoudao(rst);
|
||||
putEngineResult(ids.YOUDAO, parseYoudao(rst), time)
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.YOUDAO] = htmlToDom('error: 无法连接翻译服务');
|
||||
putEngineResult(ids.YOUDAO, htmlToDom('error: 无法连接翻译服务'), time);
|
||||
showContent();
|
||||
});
|
||||
};
|
||||
obj[ids.YOUDAO_LOWER_CASE] = function (text) {
|
||||
obj[ids.YOUDAO_LOWER_CASE] = function (text, time) {
|
||||
ajax('http://dict.youdao.com/jsonapi?xmlVersion=5.1&jsonversion=2&q=' + encodeURIComponent(text.toLowerCase()), function (rst) {
|
||||
engineResult[ids.YOUDAO_LOWER_CASE] = parseYoudao(rst);
|
||||
putEngineResult(ids.YOUDAO_LOWER_CASE, parseYoudao(rst), time);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.YOUDAO_LOWER_CASE] = htmlToDom('error: 无法连接翻译服务');
|
||||
putEngineResult(ids.YOUDAO_LOWER_CASE, htmlToDom('error: 无法连接翻译服务'), time)
|
||||
showContent();
|
||||
});
|
||||
};
|
||||
obj[ids.BING] = function (text) {
|
||||
obj[ids.BING] = function (text, time) {
|
||||
ajax('https://www4.bing.com/dict/search?q=' + encodeURIComponent(text), function (rst) {
|
||||
engineResult[ids.BING] = parseBing(rst);
|
||||
putEngineResult(ids.BING, parseBing(rst), time);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.BING] = htmlToDom('error: 无法连接翻译服务');
|
||||
putEngineResult(ids.BING, htmlToDom('error: 无法连接翻译服务'), time);
|
||||
showContent();
|
||||
});
|
||||
};
|
||||
obj[ids.BING_LOWER_CASE] = function (text) {
|
||||
obj[ids.BING_LOWER_CASE] = function (text, time) {
|
||||
ajax('https://www4.bing.com/dict/search?q=' + encodeURIComponent(text.toLowerCase()), function (rst) {
|
||||
engineResult[ids.BING_LOWER_CASE] = parseBing(rst);
|
||||
putEngineResult(ids.BING_LOWER_CASE, parseBing(rst), time);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.BING_LOWER_CASE] = htmlToDom('error: 无法连接翻译服务');
|
||||
putEngineResult(ids.BING_LOWER_CASE, htmlToDom('error: 无法连接翻译服务'), time);
|
||||
showContent();
|
||||
});
|
||||
};
|
||||
obj[ids.HJENGLISH] = function (text) {
|
||||
obj[ids.HJENGLISH] = function (text, time) {
|
||||
ajax('https://dict.hjenglish.com/w/' + encodeURIComponent(text), function (rst) {
|
||||
engineResult[ids.HJENGLISH] = parseHjenglish(rst);
|
||||
putEngineResult(ids.HJENGLISH, parseHjenglish(rst), time);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.HJENGLISH] = htmlToDom('error: 无法连接翻译服务');
|
||||
putEngineResult(ids.HJENGLISH, htmlToDom('error: 无法连接翻译服务'), time);
|
||||
showContent();
|
||||
}, {
|
||||
headers: {
|
||||
|
@ -592,7 +592,7 @@
|
|||
}
|
||||
});
|
||||
};
|
||||
obj[ids.GOOGLE] = function (text) {
|
||||
obj[ids.GOOGLE] = function (text, time) {
|
||||
var url = 'https://translate.google.cn/translate_a/single?client=gtx&dt=t&dt=bd&dj=1&source=input&hl=zh-CN&sl=auto';
|
||||
url += '&tk=' + token(text);
|
||||
if (hasChineseByRange(text)) {
|
||||
|
@ -601,20 +601,20 @@
|
|||
url += '&tl=zh-CN&q=' + encodeURIComponent(text);
|
||||
}
|
||||
ajax(url, function (rst) {
|
||||
engineResult[ids.GOOGLE] = parseGoogle(rst);
|
||||
putEngineResult(ids.GOOGLE, parseGoogle(rst), time);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.GOOGLE] = htmlToDom('error: 无法连接翻译服务');
|
||||
putEngineResult(ids.GOOGLE, htmlToDom('error: 无法连接翻译服务'), time);
|
||||
showContent();
|
||||
});
|
||||
};
|
||||
obj[ids.CAMBRIDGE] = function (text) {
|
||||
obj[ids.CAMBRIDGE] = function (text, time) {
|
||||
var url = 'https://dictionary.cambridge.org/dictionary/english-chinese-simplified/' + encodeURIComponent(text);
|
||||
ajax(url, function (rst) {
|
||||
engineResult[ids.CAMBRIDGE] = parseCambridge(rst);
|
||||
putEngineResult(ids.CAMBRIDGE, parseCambridge(rst), time);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.CAMBRIDGE] = htmlToDom('error: 无法连接翻译服务');
|
||||
putEngineResult(ids.CAMBRIDGE, htmlToDom('error: 无法连接翻译服务'), time);
|
||||
showContent();
|
||||
});
|
||||
};
|
||||
|
@ -628,23 +628,23 @@
|
|||
name: '多词典查询',
|
||||
id: 'icon-dict',
|
||||
image: 'data:image/png;base64,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',
|
||||
trigger: function (text) {
|
||||
trigger: function (text, time) {
|
||||
idsType = idsExtension.LIST_DICT;
|
||||
if (text != text.toLowerCase()) {
|
||||
idsType = idsExtension.LIST_DICT_LOWER_CASE; // 大小写各请求一次
|
||||
}
|
||||
idsType.forEach(function (id) {
|
||||
idsExtension.engines[id](text);
|
||||
idsExtension.engines[id](text, time);
|
||||
});
|
||||
}
|
||||
}, {
|
||||
name: '谷歌翻译',
|
||||
id: 'icon-google',
|
||||
image: 'data:image/png;base64,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',
|
||||
trigger: function (text) {
|
||||
trigger: function (text, time) {
|
||||
idsType = idsExtension.LIST_GOOGLE;
|
||||
idsType.forEach(function (id) {
|
||||
idsExtension.engines[id](text);
|
||||
idsExtension.engines[id](text, time);
|
||||
});
|
||||
}
|
||||
}];
|
||||
|
@ -665,10 +665,11 @@
|
|||
content.scrollTop = 0; // 翻译面板滚动到顶端
|
||||
content.scrollLeft = 0; // 翻译面板滚动到左端
|
||||
engineId = obj.id; // 翻译引擎 ID
|
||||
engineTriggerTime = new Date().getTime(); // 引擎触发时间
|
||||
engineActivateShow(); // 显示翻译引擎指示器
|
||||
audioEngines = []; // 清空发音引擎
|
||||
engineResult = {}; // 清空翻译引擎结果集
|
||||
obj.trigger(selected); // 启动翻译引擎
|
||||
obj.trigger(selected, engineTriggerTime); // 启动翻译引擎
|
||||
}
|
||||
});
|
||||
icon.appendChild(img);
|
||||
|
@ -933,6 +934,12 @@
|
|||
}
|
||||
});
|
||||
}
|
||||
/**放入翻译引擎结果集*/
|
||||
function putEngineResult(id, value, time) {
|
||||
if (time == engineTriggerTime) { // 是本次触发的异步ajax请求
|
||||
engineResult[id] = value;
|
||||
}
|
||||
}
|
||||
/**翻译引擎结果集状态判断*/
|
||||
function isAllDone() {
|
||||
var rst = true;
|
||||
|
@ -1033,6 +1040,7 @@
|
|||
icon.style.display = 'none';
|
||||
content.style.display = 'none';
|
||||
engineId = '';
|
||||
engineTriggerTime = 0;
|
||||
audioEngines = [];
|
||||
engineResult = {};
|
||||
engineActivateHide();
|
||||
|
|
Loading…
Reference in New Issue
Block a user