修复中文编码问题,优化UI响应流程
This commit is contained in:
parent
89bf369b5f
commit
2cff1e6cb0
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name 划词翻译:多词典查询
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 1.8
|
||||
// @version 1.9
|
||||
// @description 划词翻译调用“有道词典(有道翻译)、金山词霸、Bing 词典(必应词典)、沪江小D、谷歌翻译”
|
||||
// @author https://github.com/barrer
|
||||
// @match http://*/*
|
||||
|
@ -376,14 +376,21 @@
|
|||
var link = document.createElement('link');
|
||||
link.rel = 'stylesheet';
|
||||
link.type = 'text/css';
|
||||
link.href = URL.createObjectURL(new Blob([style.textContent], {
|
||||
link.href = URL.createObjectURL(new Blob(['\ufeff', style.textContent], {
|
||||
type: 'text/css;charset=UTF-8'
|
||||
}));
|
||||
// 翻译图标、内容面板、当前选中文本、当前翻译引擎
|
||||
// 翻译图标、内容面板、翻译内容列表、当前选中文本、当前翻译引擎、当前翻译面板内容列表数组
|
||||
var icon = document.createElement('tr-icon'),
|
||||
content = document.createElement('tr-content'),
|
||||
contentList = document.createElement('div'),
|
||||
selected,
|
||||
engineId;
|
||||
engineId,
|
||||
idsType;
|
||||
// 初始化内容面板
|
||||
var largeHeight = document.createElement('div'); // 防止滚动条闪来闪去
|
||||
largeHeight.style.height = '10000px';
|
||||
content.appendChild(contentList);
|
||||
content.appendChild(largeHeight);
|
||||
// 发音引擎
|
||||
var audioEngines = []; // [{name: 'abc', url: 'http://*.mp3', ...}, ...]
|
||||
// 翻译引擎结果集
|
||||
|
@ -431,37 +438,37 @@
|
|||
id: 'icon-dict',
|
||||
image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAwFBMVEX////9+/zc4eSwusOZprF1h5VpfIu5w8rk6Or3+PljeIjy8/X////M09h+kJ2ns7zr7vCMm6dccoNWbX7S2N3GztTAyc/X3OD+9fb95ub6xMX5t7j2qqv0iInydXbxcHH8bW2adH72m5vzfn/xbW7xa2zNcXXibnHxbm/xaGnwZGXwYGHwX2D70dLwXV75vr7z+/7o9/3S7/vL7frc8/yw5fqg3vaL1vRry/HL8f1bxfBVwu9Twu9MwO9Gvu5BvO1OQbHPAAAAAXRSTlMAQObYZgAABjtJREFUeAHsltWChDAMAK9O00DbBPn/Lz0J524bXph1zdBZ4erk5OTk5OTk5DcY63yInxN8Gi41P7sA3yGkfJH5xcM3ib5cYr6L8F1i+v/5OAb4PtP4/wtQ4SfUfxdoHX7C/38K7ARvIb7j3QbzfwvMAd7AwS3rUiPBG8KiIuCLMWboRwkQJIOIxhEdI8DBGrxli0cJ+IJty9j6MQJSYKxNGhwhwJNFdNOGOIcjBKRA9pTuGjDpC0iBNrHP0kBfgKcBcY5ysQU+QGDfdI6LwdaJtAUI1n0w1TsRUBeQ78AYCe4bqAvIhlcikAalE+kKUFwRh84ARL6gScS6ArLwCzARcbB3DbQFasbsmW5hSBlLZ9IUoLgg5rW6W2odM5oErCggBV5ig65ANYgmP2BQGugJSIGS6gOzNFAUkALzw6IT9yYN1ASIqpH/AdrhuCEWz6QmEEfE1vnpf8FlxASsJcD9qYDw1EBH4K4AOqIngTDvDXQEpECRAm8baAhwb692REnuGiYdASKHJrt9/lMDY7J/qnJDizloMQgAADDbtl3//33zsuu2+HS57noBvRXAeJbVuJ6ARCEqqyLUaQEGNGYwuU6BeUL16a48/nlumKZlz+Cg/SwwlQo6O0UkDmy9Ybuu508T+OG+QgLuFzCj2E/mSIOMkqhbM5nhJksESUhJd4ZC0EmTRYJ8swF25Aww/SRZNcC2GGAof6QW20XSJ33TMyiyMPw16Tk4kWcPpeKoK1CUVd3U1Xf8twiCJM8+2MoMkAACh3C7AqnnRpHz4tGOeS47qsMAmPz3A9AzA2HG9rkQCLisG+//Vlfe3dOcnsCt+U6v+izJspOqKkpKG/zp8Is0Wpr6i0DzlrdJvPH3zjhJ2rwmJKgPztYV6PYb9MmmrSj5iwUyEPg5ltM2BoWkoASfFOiHw3iRw9Q/KpDvCGyDsmrh87amzQmBgXEhryHY9KAAoYQQ2tUtQnFOvqVg6wXQD6G01uYS2iNZ/2AGdhhj0lVQhRbTI4FRanMTWnH0oACAuyIBgZLioATDrfEBxR4RwD8Ftl3tBbahQM+VuR05PJoBKEERozhrQoFJ6nNV9++BMAWPZMC3wG6PUFId7YIfJwQgqHXz7Jx/Z43+8hP+gADt/FlQZjHaZDuKAwF2XAEf3molPUoZ+PzzR/J+gawu67qoWijAvoQEhALahFhnpGCHaRqGaWRcKPOUQNK2bZLEPv8NxL8moA2EZ1P/McT7ScxPCHw7Cght8BUBiK/4tPGBB6DvERrErJ8RiBNYf4z8J2kNBhcFtHWSQVA0MSH8/OVsYso9IxDnvgOqLNn4JIDBJQG//hF+ceDSWOecb0YpjXlKoOreKKWkznwW0i3F5wW0dppB/IOwfvtZY6wFBwM8I0BJ0xDaEW+QwFf4vIB1HPI/ydkZ/Y4xTws0EAk3XdlCETJCzwpAAeQBuk/MLoj7tACwpcS3ZFpeELDWJ4BpH39xAUxIFYdXkkAAOtDvOj/6VhHINz/P4/NN6OQAHahmY9YQ6Lap74HmbAmgAgIEmHF6eYGmoV2V/DoOzwsYaIGeW7uwQPfzTkiLBIXHYSigGQiIpQXyLd6WdZElyLfgW3NewGmGFhbYb9AmSdO0bX34OC18AS4IjMsJhKchiLR56dd/QWDxEtAiy/aw/DbdZ3lRvgXxj5sQBBC3i+0C2PtvlOCyLrewCbo/CN4F4H3EgkH47DasvgVpCKG/IKTBeBdStt8G0eznwCSfGkRZUORPdsfgIon4p4D+dRY9N4rbcnc7uIp9BoImGJUz+mGBOL9DoE6j7wL+MPCz0D2egSgpbo5f5vE3AaiBYRt/HlpnHxaI2mp74/rzJAoEjJMjAgOurP2lAB/1nQJRkhd1ia9UH4bzfhMFAlCEWUwIGIVU8AOtlBTC2PsEQCHNqytkbRJ5jq/l3gA4MC4E52xCh+BaviihgM+BHHv0lUHOf6GA7wMtxuHDoR9G6cxfKAC4WUs+HqZpOoyMSy+1nsC5h+ezs0oqO8/wiTFrChykNsdo/XMHHj1DovniAoMwd6DGxQUQ1OBmtByiFVKg/s4EAJO80UArHq3CwJXWV6NrJcdoJfqRC6kuIwUbon8gL168ePHixYs/AQllYQQ4I2UrAAAAAElFTkSuQmCC',
|
||||
trigger: function (text) {
|
||||
var idsType = idsExtension.LIST_DICT;
|
||||
idsType = idsExtension.LIST_DICT;
|
||||
if (text != text.toLowerCase()) {
|
||||
idsType = idsExtension.LIST_DICT_LOWER_CASE;
|
||||
}
|
||||
ajax('http://open.iciba.com/huaci_v3/dict.php?word=' + encodeURIComponent(text), function (rst) {
|
||||
engineResult[ids.ICIBA] = parseIciba(rst);
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.ICIBA] = htmlToDom('error: 无法连接翻译服务');
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
});
|
||||
ajax('http://dict.youdao.com/jsonapi?xmlVersion=5.1&jsonversion=2&q=' + encodeURIComponent(text), function (rst) {
|
||||
engineResult[ids.YOUDAO] = parseYoudao(rst);
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.YOUDAO] = htmlToDom('error: 无法连接翻译服务');
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
});
|
||||
ajax('https://cn.bing.com/dict/search?q=' + encodeURIComponent(text), function (rst) {
|
||||
engineResult[ids.BING] = parseBing(rst);
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.BING] = htmlToDom('error: 无法连接翻译服务');
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
});
|
||||
ajax('https://dict.hjenglish.com/w/' + encodeURIComponent(text), function (rst) {
|
||||
engineResult[ids.HJENGLISH] = parseHjenglish(rst);
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.HJENGLISH] = htmlToDom('error: 无法连接翻译服务');
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
}, {
|
||||
headers: {
|
||||
'Cookie': 'HJ_SID=' + uuid() + '; HJ_SSID_3=' + uuid() + '; HJ_CST=1; HJ_CSST_3=1; HJ_UID=' + uuid()
|
||||
|
@ -470,24 +477,24 @@
|
|||
if (text != text.toLowerCase()) { // 小写再请求一次
|
||||
ajax('http://open.iciba.com/huaci_v3/dict.php?word=' + encodeURIComponent(text.toLowerCase()), function (rst) {
|
||||
engineResult[ids.ICIBA_LOWER_CASE] = parseIciba(rst);
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.ICIBA_LOWER_CASE] = htmlToDom('error: 无法连接翻译服务');
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
});
|
||||
ajax('http://dict.youdao.com/jsonapi?xmlVersion=5.1&jsonversion=2&q=' + encodeURIComponent(text.toLowerCase()), function (rst) {
|
||||
engineResult[ids.YOUDAO_LOWER_CASE] = parseYoudao(rst);
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.YOUDAO_LOWER_CASE] = htmlToDom('error: 无法连接翻译服务');
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
});
|
||||
ajax('https://cn.bing.com/dict/search?q=' + encodeURIComponent(text.toLowerCase()), function (rst) {
|
||||
engineResult[ids.BING_LOWER_CASE] = parseBing(rst);
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.BING_LOWER_CASE] = htmlToDom('error: 无法连接翻译服务');
|
||||
showContent(idsType);
|
||||
showContent();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -496,6 +503,7 @@
|
|||
id: 'icon-google',
|
||||
image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAwFBMVEX////x+Pu83vl9vvRQq/Q0nvQsm/STyfXY6/pktfYjmfUhlvOr1Pb2+/0+pPT6/P3K4/f8/f0ak/Px8/Xz9vf2+Pn5+vrk6ezt8PLs7/H//vr18/ETkPP6/Pr59fL9+/rq7fDf7/wJi/PE2/DM09edqK6psrfZ4OZzg4s6UFtHXGb9+fS/x8xic3oPkvuQnaSCkZixu8Egm/wjjuEyaZItRVAwhNN2rOBQltkgfNQnlOw2l+UfjeoKgeZCmugYddL/Jsx8AAAAAXRSTlMAQObYZgAABd1JREFUeAHs01uyoyAQxvEoN6HVo2AINhqSzGX/S5zXmTpUBTN2+eJ/A/yqv+JydnZ2dnZ2dpatqhkX8k1CVReiGi0NvE+0F5K6tjdQktE0J2gFFNY3JPfvoTRJsUGlDZRmdLc/oJZQEOEGDAqi3IDDlvTX7gABWxL7byBhS0YdDABeHQwQw3gsANTlYADvDgbI+mssiwhglZtcQdPVjyQA4LcwFxWmESkA0MYwl+X8SACwrBgwB48EgP4W59LcSACQ+Q3yTePuAFiYKz9BWP8DYG0ewIctJ/gYYI1WHDIGC+29HOA+B7BqbPjyXWAXNm/Y4FOAFQ3iqGDJbNAP90AP0FVKWPc5gGmjIwdAu64enbbZDR6RHCCeyXtEZTInePVDDMQAy3zyq8cht4E1KsYHMaBOPqHHrmQDAsDCnyldm2vCVtrcBj/ugRbA1oQ1C4gNz/0DUDFSAqysEZGJAbFj2Q307f73Ky7sDOAuoeMv1SG24vsJzD8bPMI0TW5PgLUKE9bmpZ+Iz7cbhPDz1+/brgA5YFqZfYka0bM/7ZqHduq8EkYD5mJMR8UWioINiZvAaffQTn3/t/pHoqQpzUq8GvuU9Mxe80kjJdAxLcOHDBhJs1wm+CsFPAqrrz+bzZwa5/VXMphTovHDhczzbLB7k5IdLCovgFD3Igzr7XZTNFQGnjCmFEWBJooSEChY8BhMLDqgDsILf+gqpiHnrulmct2Ibw5kUspi//rtrX5xlxJWVgAJaLzvX3BF6PvmI/H+/z/yIxLYv7rcvyfGNCor0OnyMOR7Qp8Tb2YQQCBgYGeyXGbRoKQAEo0WCNT2+DAS3Q4yGKzkA7l8ToxJaQHH52HLdVyF0yUhHIkz05F4Ex+50a8ncQEuWQwsIlx2EYpml/MLVwgkADj6Oa85AplmEfXJE3haQAZ3vk8oLb8L9NbDnkCamQAd3jVeS7zpHO8hGKAj2I/LLB3AW6z0IEIdJ+Sj4eEQRnocDxuGDMT/nl3PaZDB+rsJiNUkFDB+Q989tLz9egYIuXAxY0cHTFUDigXFNgIIeSqBBjoKITd8JQPhtSaYHLtN0l0D6NhOwOUcxjB6HDXnrVcymF/dXR32G0mk1A2wEhD9uuo4enzswHt6r2SQZkt5N9IlSVAcGmAhgIRX4+G0jx6/y+XqSDSNAu9OLvPiasSgEI2lhNcpthIQbah20VUJPM1g6pky6K+LpcxvGYx9/0o3ICJ29wGI9UW/RVOnYupA04mhqgqBwBaUS2gAsxOAKcB6z2+BwmPmSQAfWWRL1XhObtQpFGNieyNCTc/poxfvc00/n+glC7chGP/B3e4FZdZXMgQYflWi32mcRRCClLcF1JcQQGQtYCx1lDIcHEG2VMXhb0JwZHUpLYFatFew/BR6B1QtgJBD+aJQDSjSEateQF2f5om+EBUJrr4DKgNX1c9ztQaY9SIswf1G1S+kMojHYFCxQPt+q34quUt2BsxnUdUd+PkD6o/8gwH0oFqBNloViwEhdG8QUValACB+LTiJop3BUq+DigWa3TmUBIO7nUFEqhVASP/K7GAAhzPGFQoAqD+c6FrE1z24DchnBPr2Ah13wg4GhboVfaoDDXsB5EEGGkwWt3GK2WcEnLa1gThkADCMP7kNh1+wCNqHDADGPjkJe/YtQMJj5yV/UQlM+1+SQXmBUd3aQP+YWlIA6NU96xY0gtICwKjlfrgJbROdmccsBIBa3XW8D/Hzt4E/f4c2EWh6telHaK3/bZ/z79/qEuqXEShB999LVt3J+bgqAbZ5KeBC/coERs7z8lvnfDKuSgC4XD0TWJ/Px1UK0M32af0I6lcnALhPBDYB1K9WYLp6XD/lzO75AyVYP7RgdclxZPEMCttluOrOz9+pz/yvF6htDhsQBkBk/TyeEjj7DJzJ5L36DOp/WwZrNh+/A6Nn30FNj4J1MGHv1udn34ILLdgM36vP8ODsm8Dr7TqdYPYWmPgl8q+AEydOnDhx4sR/q8tILrvoB2AAAAAASUVORK5CYII=',
|
||||
trigger: function (text) {
|
||||
idsType = idsExtension.LIST_GOOGLE;
|
||||
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))
|
||||
|
@ -504,10 +512,10 @@
|
|||
url += '&tl=zh-CN&q=' + text;
|
||||
ajax(url, function (rst) {
|
||||
engineResult[ids.GOOGLE] = parseGoogle(rst);
|
||||
showContent(idsExtension.LIST_GOOGLE);
|
||||
showContent();
|
||||
}, function (rst) {
|
||||
engineResult[ids.GOOGLE] = htmlToDom('error: 无法连接翻译服务');
|
||||
showContent(idsExtension.LIST_GOOGLE);
|
||||
showContent();
|
||||
});
|
||||
}
|
||||
}];
|
||||
|
@ -522,8 +530,10 @@
|
|||
if (!isDrag()) { // 没有拖动鼠标抬起的时候触发点击事件
|
||||
if (engineId == obj.id)
|
||||
return; // 已经是当前翻译引擎
|
||||
else
|
||||
cleanContent(); // 清空之前翻译结果
|
||||
contentList.innerHTML = ''; // 清空翻译内容列表
|
||||
content.style.display = 'block'; // 立马显示翻译面板
|
||||
content.scrollTop = 0; // 翻译面板滚动到顶端
|
||||
content.scrollLeft = 0; // 翻译面板滚动到左端
|
||||
engineId = obj.id; // 翻译引擎 ID
|
||||
engineActivateShow(); // 显示翻译引擎指示器
|
||||
audioEngines = []; // 清空发音引擎
|
||||
|
@ -769,7 +779,7 @@
|
|||
});
|
||||
}
|
||||
/**翻译引擎结果集状态判断*/
|
||||
function isAllDone(idsType) {
|
||||
function isAllDone() {
|
||||
var rst = false;
|
||||
idsType.forEach(function (id, i) {
|
||||
if (i == 0)
|
||||
|
@ -783,9 +793,9 @@
|
|||
return rst;
|
||||
}
|
||||
/**显示内容面板*/
|
||||
function showContent(idsType) {
|
||||
function showContent() {
|
||||
log('showContent:', idsType, engineResult);
|
||||
if (isAllDone(idsType)) {
|
||||
if (isAllDone()) {
|
||||
log('showContent allDone');
|
||||
}
|
||||
log('showContent rendering');
|
||||
|
@ -803,14 +813,14 @@
|
|||
audioEngines.forEach(function (obj) {
|
||||
audio.appendChild(getPlayButton(obj));
|
||||
});
|
||||
// 翻译内容
|
||||
content.innerHTML = '';
|
||||
contentList.innerHTML = ''; // 清空翻译内容列表
|
||||
// 比较大小写内容
|
||||
var needDel = {};
|
||||
for (var key in idsExtension.lowerCaseMap) {
|
||||
if (engineResult[key] &&
|
||||
engineResult[idsExtension.lowerCaseMap[key]] &&
|
||||
engineResult[key].innerHTML == engineResult[idsExtension.lowerCaseMap[key]].innerHTML) {
|
||||
(engineResult[key].innerHTML == engineResult[idsExtension.lowerCaseMap[key]].innerHTML ||
|
||||
engineResult[key].innerHTML.toLowerCase() == engineResult[idsExtension.lowerCaseMap[key]].innerHTML.toLowerCase())) {
|
||||
needDel[key] = key;
|
||||
}
|
||||
}
|
||||
|
@ -820,20 +830,14 @@
|
|||
var title = document.createElement('div');
|
||||
title.innerHTML = idsExtension.names[id];
|
||||
title.setAttribute('class', 'list-title');
|
||||
content.appendChild(title);
|
||||
contentList.appendChild(title);
|
||||
}
|
||||
content.appendChild(engineResult[id]);
|
||||
contentList.appendChild(engineResult[id]);
|
||||
}
|
||||
});
|
||||
if (engineId != 'icon-google') { // 谷歌翻译不显示发音图标
|
||||
content.insertBefore(audio, content.childNodes[0]);
|
||||
contentList.insertBefore(audio, contentList.childNodes[0]);
|
||||
}
|
||||
var largeHeight = document.createElement('div'); // 防止滚动条闪来闪去
|
||||
largeHeight.style.height = '10000px';
|
||||
content.appendChild(largeHeight);
|
||||
content.style.display = 'block';
|
||||
content.scrollTop = 0;
|
||||
content.scrollLeft = 0;
|
||||
}
|
||||
/**隐藏翻译引擎指示器*/
|
||||
function engineActivateHide() {
|
||||
|
@ -856,13 +860,6 @@
|
|||
engineActivateHide();
|
||||
forceStopDrag();
|
||||
}
|
||||
/**清空翻译面板*/
|
||||
function cleanContent() {
|
||||
content.innerHTML = '';
|
||||
var largeHeight = document.createElement('div'); // 防止滚动条闪来闪去
|
||||
largeHeight.style.height = '10000px';
|
||||
content.appendChild(largeHeight);
|
||||
}
|
||||
/**发音*/
|
||||
function play(obj) {
|
||||
if (isDrag()) { // 拖动时候不触发发音
|
||||
|
@ -1043,6 +1040,15 @@
|
|||
if (oald)
|
||||
html += '<div class="oald">《牛津高阶英汉双解词典第八版》<br>' + oald.outerHTML + '</div>';
|
||||
}
|
||||
// 计算机翻译
|
||||
var machineTrans = doc.querySelector('.smt_hw');
|
||||
if (machineTrans && machineTrans.innerHTML.indexOf('计算机翻译') != -1) {
|
||||
var parent = machineTrans.parentNode;
|
||||
var zhText = parent.querySelector('.p1-11');
|
||||
if (zhText) {
|
||||
html += '<div class="machine-trans">' + zhText.outerHTML + '</div>';;
|
||||
}
|
||||
}
|
||||
} catch (error) {
|
||||
log(error);
|
||||
html += error;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// ==UserScript==
|
||||
// @name Translate
|
||||
// @namespace http://tampermonkey.net/
|
||||
// @version 4.0
|
||||
// @version 4.1
|
||||
// @description 划词翻译调用“金山词霸、有道词典(有道翻译)、Google Translate(谷歌翻译)、沪江小D、搜狗翻译、必应词典(必应翻译)、Microsoft Translator(必应在线翻译)、海词词典、百度翻译、Oxford Learner's Dictionaries、Oxford Dictionaries、Merriam-Webster、汉典、PDF 划词翻译”网页翻译
|
||||
// @author https://github.com/barrer
|
||||
// @match http://*/*
|
||||
|
@ -92,7 +92,7 @@
|
|||
var link = document.createElement('link');
|
||||
link.rel = 'stylesheet';
|
||||
link.type = 'text/css';
|
||||
link.href = URL.createObjectURL(new Blob([style.textContent], {
|
||||
link.href = URL.createObjectURL(new Blob(['\ufeff', style.textContent], {
|
||||
type: 'text/css;charset=UTF-8'
|
||||
}));
|
||||
var gm = {
|
||||
|
|
Loading…
Reference in New Issue
Block a user