在 bing词典 中聚合显示 有道 的结果 添加转跳至各种在线工具的按钮

1. Display youdao.com results alongside the original results on bing.com/dict. 2. Provide shortcuts for many online tools.

  1. // ==UserScript==
  2. // @name 在 bing词典 中聚合显示 有道 的结果 添加转跳至各种在线工具的按钮
  3. // @namespace http://tampermonkey.net/
  4. // @version 11.2.1
  5. // @license MIT
  6. // @description 1. Display youdao.com results alongside the original results on bing.com/dict. 2. Provide shortcuts for many online tools.
  7. // @author 庶民player
  8. // @match *.bing.com/dict*
  9. // @match *.bing.net/dict*
  10. // @icon https://cn.bing.com/sa/simg/favicon-2x.ico
  11. // @run-at document-idle
  12. // @compatible edge
  13. // @compatible chrome
  14. // @compatible safari
  15. // @grant none
  16. // ==/UserScript==
  17.  
  18.  
  19. function clone_a(name) {
  20. const original = document.getElementById('b-scopeListItem-images');
  21. if (!original) return;
  22.  
  23. const tmp = original.cloneNode(true);
  24. tmp.id = name;
  25. original.parentNode.insertBefore(tmp, original.nextSibling);
  26. }
  27. function clone_b(name) {
  28. const original = document.getElementById('b-scopeListItem-flights');
  29. if (!original) return;
  30.  
  31. const tmp = original.cloneNode(true);
  32. tmp.id = name;
  33. original.parentNode.insertBefore(tmp, original.nextSibling);
  34. }
  35.  
  36. function check_emp(x) {
  37. return x.length > 0;
  38. }
  39.  
  40. function go_dn(elem_name) {
  41. const elem = document.querySelector(elem_name);
  42. if (!elem) return;
  43.  
  44. const parent = elem.parentNode;
  45. let nextSibling = elem.nextElementSibling;
  46.  
  47. while (nextSibling) {
  48. parent.appendChild(elem); // 将当前元素移至末尾,实现下移
  49. nextSibling = elem.nextElementSibling;
  50. }
  51. }
  52.  
  53. (function() {
  54. 'use strict';
  55.  
  56. var wd = "NONE";
  57.  
  58. var path = window.location.pathname.split('/').filter(check_emp);
  59. if(path.length > 1)
  60. wd = path[path.length -1];
  61.  
  62. var vals = window.location.search.substring(1).split('&');
  63. for(var i in vals){
  64. var pair = vals[i].split('=');
  65. if(pair[0] == "q") wd = pair[1];
  66. }
  67.  
  68. wd = wd.replace(/%20/g,'+');
  69. wd = wd.split('+').filter(check_emp).join('+');
  70.  
  71. try{
  72. if(vals.length > 2) window.history.replaceState(null, null, 'https://' + window.location.hostname + '/dict/search?mkt=zh-CN&q=' + wd);
  73. }catch(error){}
  74.  
  75. //-=-=-=-=-=-=-=-=-=-=-=-=-以下修改各种按钮-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  76. document.getElementById('b-scopeListItem-local').style.display = 'none';
  77.  
  78.  
  79. clone_b('oxford');clone_b('cambridge');clone_b('mw');clone_b('pwr');
  80.  
  81. const mwLink = document.getElementById('mw').querySelector('a');
  82. mwLink.textContent = "webster";
  83. mwLink.href = "https://www.merriam-webster.com/dictionary/" + wd;
  84.  
  85. const oxfordLink = document.getElementById('oxford').querySelector('a');
  86. oxfordLink.textContent = "oxford";
  87. oxfordLink.href = 'https://www.oxfordlearnersdictionaries.com/definition/english/'+wd;
  88.  
  89. const cambridgeLink = document.getElementById('cambridge').querySelector('a');
  90. cambridgeLink.textContent = "cambridge";
  91. cambridgeLink.href = 'https://dictionary.cambridge.org/zhs/dictionary/english/'+wd;
  92.  
  93. const pwrLink = document.getElementById('pwr').querySelector('a');
  94. pwrLink.textContent = "pwr thesaurus";
  95. pwrLink.href = 'https://www.powerthesaurus.org/'+wd;
  96.  
  97. const flightsLink = document.getElementById('b-scopeListItem-flights').querySelector('a');
  98. flightsLink.textContent = "urban dict";
  99. flightsLink.href = 'https://www.urbandictionary.com/define.php?term='+wd;
  100.  
  101. go_dn("#b-scopeListItem-flights");
  102.  
  103. clone_a('acronyms');clone_a('jtw');clone_a('anti');clone_a('full_write');clone_a('rhyme');clone_a('wenku');
  104.  
  105. const wenkuLink = document.getElementById('wenku').querySelector('a');
  106. wenkuLink.textContent = "论文例句 & 替词";
  107. wenkuLink.href = 'http://www.esoda.org/?q='+ wd;
  108.  
  109. const antiLink = document.getElementById('anti').querySelector('a');
  110. antiLink.textContent = "反义词";
  111. antiLink.href = 'https://zh.powerthesaurus.org/' + wd +'/antonyms';
  112.  
  113. const rhymeLink = document.getElementById('rhyme').querySelector('a');
  114. rhymeLink.textContent = "押韵";
  115. rhymeLink.href = 'https://www.wordhippo.com/what-is/words-that-rhyme-with/'+ wd + '.html';
  116.  
  117. const fullWriteLink = document.getElementById('full_write').querySelector('a');
  118. fullWriteLink.textContent = "全写";
  119. fullWriteLink.href = 'https://www.allacronyms.com/'+ wd;
  120.  
  121. const acronymsLink = document.getElementById('acronyms').querySelector('a');
  122. acronymsLink.textContent = "缩写";
  123. acronymsLink.href = 'https://acronymify.com/search?q='+ wd;
  124.  
  125. const jtwLink = document.getElementById('jtw').querySelector('a');
  126. jtwLink.textContent = "搭配";
  127. jtwLink.href = 'http://www.just-the-word.com/main.pl?word='+ wd;
  128.  
  129. const videoLink = document.getElementById('b-scopeListItem-video').querySelector('a');
  130. videoLink.textContent = "源流";
  131. videoLink.href = 'https://www.etymonline.com/word/'+ wd;
  132.  
  133. const imagesLink = document.getElementById('b-scopeListItem-images').querySelector('a');
  134. imagesLink.textContent = "同义词";
  135. imagesLink.href = 'https://www.thesaurus.com/browse/'+ wd;
  136.  
  137. go_dn("#jtw");
  138. go_dn("#wenku");
  139. go_dn("#b-scopeListItem-images");
  140. go_dn("#anti");
  141. go_dn("#acronyms");
  142. go_dn("#full_write");
  143. go_dn("#b-scopeListItem-dictionary");
  144. go_dn("#b-scopeListItem-video");
  145. go_dn("#rhyme");
  146. go_dn("#b-scopeListItem-menu");
  147.  
  148. //-=-=-=-=-=-=-=-=-=-=-=-=-以下显示各种按钮-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  149. const mouse_on_effect = {filter: "drop-shadow(0px 1px 3px #808080)", transition: "0.1s", transitionTimingFunction: "ease-out"};
  150. const mouse_out_effect = {filter: "drop-shadow(0px 1px 3px #d0d0d0)", transition: "0.1s", transitionTimingFunction: "ease-out"};
  151.  
  152.  
  153. const linggle_button = document.createElement('button');
  154. linggle_button.className = 'btn btn-sm';
  155. const headerElem = document.getElementById('b_header');
  156. const logoElem = document.querySelector('.b_logo');
  157. Object.assign(linggle_button.style, {
  158. border: "0",
  159. backgroundColor: "transparent",
  160. cursor: "pointer",
  161. position: "absolute",
  162. left: (headerElem.offsetLeft + 57) + "px",
  163. top: (headerElem.offsetTop + headerElem.offsetHeight - 37) + "px"
  164. });
  165. linggle_button.innerHTML = `
  166. <img
  167. src="https://search.linggle.com/linggle-logo.png"
  168. alt="linggle-logo"
  169. width=${parseInt(logoElem.offsetWidth * 0.6)}px
  170. />
  171. `;
  172. linggle_button.onclick = function() {
  173. location.href = "https://search.linggle.com/?q=" + wd;
  174. }
  175. document.body.append(linggle_button);
  176.  
  177.  
  178. const ludwig_button = document.createElement('button');
  179. ludwig_button.className = 'btn btn-sm';
  180. Object.assign(ludwig_button.style, {
  181. border: "0",
  182. backgroundColor: "transparent",
  183. cursor: "pointer",
  184. position: "absolute",
  185. left: (headerElem.offsetLeft + 14) + "px",
  186. top: (headerElem.offsetTop + headerElem.offsetHeight - 37 -11) + "px"
  187. });
  188. ludwig_button.innerHTML = `
  189. <img
  190. src="https://ludwig.guru/icons/icon_144x144.png"
  191. alt="ludwig-logo"
  192. height=${parseInt(logoElem.offsetHeight * 2.0)}px
  193. />
  194. `;
  195. ludwig_button.onclick = function() {
  196. location.href = "https://ludwig.guru/s/" + wd;
  197. }
  198. document.body.append(ludwig_button);
  199.  
  200. const searchForm = document.getElementById('sb_form_q');
  201. const searchBox = document.getElementById('sb_search');
  202. const gaoshan_height = parseInt(searchForm.offsetHeight * 1.25);
  203.  
  204. const gaoshan_button = document.createElement('button');
  205. gaoshan_button.className = 'btn btn-sm';
  206. Object.assign(gaoshan_button.style, {
  207. border: "0",
  208. backgroundColor: "transparent",
  209. cursor: "pointer",
  210. position: "absolute",
  211. left: parseInt(searchBox.offsetLeft + searchBox.offsetWidth + 2.7 * gaoshan_height) + "px",
  212. top: parseInt(searchForm.offsetTop + searchForm.offsetHeight - gaoshan_height + 6) + "px"
  213. });
  214. Object.assign(gaoshan_button.style, {
  215. filter: mouse_out_effect.filter,
  216. transition: mouse_out_effect.transition,
  217. transitionTimingFunction: mouse_out_effect.transitionTimingFunction
  218. });
  219. gaoshan_button.onmouseout = function() {
  220. Object.assign(gaoshan_button.style, {
  221. filter: mouse_out_effect.filter,
  222. transition: mouse_out_effect.transition,
  223. transitionTimingFunction: mouse_out_effect.transitionTimingFunction
  224. });
  225. };
  226. gaoshan_button.onmouseover = function() {
  227. Object.assign(gaoshan_button.style, {
  228. filter: mouse_on_effect.filter,
  229. transition: mouse_on_effect.transition,
  230. transitionTimingFunction: mouse_on_effect.transitionTimingFunction
  231. });
  232. };
  233. gaoshan_button.innerHTML = `
  234. <img
  235. src= "https://picx.zhimg.com/v2-23056dfc4cb2193ea32e50a5679cbfce_1440w.png"
  236. alt="gaoshan-logo"
  237. height=`+ gaoshan_height +`px
  238. />
  239. `;
  240. gaoshan_button.onclick = function() {
  241. location.href = "http://www.dicts.cn/";
  242. }
  243. document.body.append(gaoshan_button);
  244.  
  245. const deepl_button = document.createElement('button');
  246. deepl_button.className = 'btn btn-sm';
  247. Object.assign(deepl_button.style, {
  248. border: "0",
  249. backgroundColor: "transparent",
  250. cursor: "pointer",
  251. position: "absolute",
  252. left: parseInt(searchBox.offsetLeft + searchBox.offsetWidth + 1.55 * gaoshan_height) + "px",
  253. top: parseInt(searchForm.offsetTop + searchForm.offsetHeight - gaoshan_height + 10) + "px"
  254. });
  255.  
  256. Object.assign(deepl_button.style, {
  257. filter: mouse_out_effect.filter,
  258. transition: mouse_out_effect.transition,
  259. transitionTimingFunction: mouse_out_effect.transitionTimingFunction
  260. });
  261.  
  262. deepl_button.onmouseout = function() {
  263. Object.assign(deepl_button.style, {
  264. filter: mouse_out_effect.filter,
  265. transition: mouse_out_effect.transition,
  266. transitionTimingFunction: mouse_out_effect.transitionTimingFunction
  267. });
  268. };
  269. deepl_button.onmouseover = function() {
  270. Object.assign(deepl_button.style, {
  271. filter: mouse_on_effect.filter,
  272. transition: mouse_on_effect.transition,
  273. transitionTimingFunction: mouse_on_effect.transitionTimingFunction
  274. });
  275. };
  276. deepl_button.innerHTML = `
  277. <img
  278. src= "https://static.deepl.com/img/logo/DeepL_Logo_darkBlue_v2.svg"
  279. alt="deepl-logo"
  280. height=`+ gaoshan_height +`px
  281. />
  282. `;
  283. deepl_button.onclick = function() {
  284. location.href = "https://www.deepl.com/translator#en/zh/" + wd.replace(/\+/g,' ');
  285. }
  286. document.body.append(deepl_button);
  287.  
  288. const baidu_button = document.createElement('button');
  289. baidu_button.className = 'btn btn-sm';
  290. Object.assign(baidu_button.style, {
  291. border: "0",
  292. backgroundColor: "transparent",
  293. cursor: "pointer",
  294. position: "absolute",
  295. left: parseInt(searchBox.offsetLeft + searchBox.offsetWidth + 0.37 * gaoshan_height) + "px",
  296. top: parseInt(searchForm.offsetTop + searchForm.offsetHeight - gaoshan_height + 10) + "px"
  297. });
  298. Object.assign(baidu_button.style, {
  299. filter: mouse_out_effect.filter,
  300. transition: mouse_out_effect.transition,
  301. transitionTimingFunction: mouse_out_effect.transitionTimingFunction
  302. });
  303. baidu_button.onmouseout = function() {
  304. Object.assign(baidu_button.style, {
  305. filter: mouse_out_effect.filter,
  306. transition: mouse_out_effect.transition,
  307. transitionTimingFunction: mouse_out_effect.transitionTimingFunction
  308. });
  309. };
  310. baidu_button.onmouseover = function() {
  311. Object.assign(baidu_button.style, {
  312. filter: mouse_on_effect.filter,
  313. transition: mouse_on_effect.transition,
  314. transitionTimingFunction: mouse_on_effect.transitionTimingFunction
  315. });
  316. };
  317. baidu_button.innerHTML = `
  318. <img
  319. src= "https://pica.zhimg.com/80/v2-4e3567b24ba7d7cfc8d496d932f73ed6_1440w.webp"
  320. alt="baidu-logo"
  321. height=`+ gaoshan_height*0.8 +`px
  322. />
  323. `;
  324. baidu_button.onclick = function() {
  325. location.href = "https://chat.baidu.com/search?word=翻译:「" + wd.replace(/\+/g,' ')+"」。搜索涉及的术语、名言或俗语等约定俗成的内容,提供各种翻译版本,并注明原句出处或权威参考等来源。若有多句,逐句分解,每句给出多种翻译后综合一种最佳版本。输出应包含:找到的参考(用表格呈现)、(若有多句)每句翻译选项(用无序列表呈现)和最终版本。";
  326. }
  327. document.body.append(baidu_button);
  328.  
  329. //-=-=-=-=-=-=-=-=-=-=-=-=-=-以下显示有道-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  330. const sidebar = document.querySelector(".sidebar");
  331. if (sidebar) sidebar.style.display = "none";
  332.  
  333. const idRh = document.getElementById("id_rh");
  334. if (idRh) idRh.style.display = "none";
  335.  
  336. const idRhW = document.getElementById("id_rh_w");
  337. if (idRhW) idRhW.remove();
  338.  
  339. if (wd == "NONE") return;
  340.  
  341. var youdao_top_padding = 190;
  342. var youdao_left_padding = 120;
  343. var youdao_width = 640;
  344. var lfArea = document.querySelector(".lf_area");
  345. var bing_width = lfArea ? lfArea.offsetWidth : 0; // Similar to $(".lf_area").width()
  346. var margin = window.innerWidth - youdao_width - bing_width;
  347.  
  348. document.getElementById("b_footer").style.display = "none";
  349.  
  350. if (lfArea) {
  351. lfArea.style.position = "absolute";
  352. lfArea.style.left = parseInt(margin * 0.34) + "px";
  353. }
  354.  
  355. var closeButtons = document.querySelectorAll('.pos_close');
  356. closeButtons.forEach(function(button) {
  357. button.click();
  358. });
  359. const expend_button = document.getElementById("ex_id");
  360. if (expend_button) expend_button.click();
  361.  
  362.  
  363.  
  364. var noResults = document.querySelector(".no_results");
  365. var isNoResultsVisible = noResults ? (window.getComputedStyle(noResults).display !== "none") : false;
  366. if (!isNoResultsVisible) {
  367.  
  368. var div = document.createElement('div');
  369. div.style.overflow = "hidden";
  370. div.style.position = "absolute";
  371. div.style.right = parseInt(margin * 0.16) + "px";
  372.  
  373.  
  374. var contentPadding = document.querySelector(".contentPadding");
  375. if (contentPadding) {
  376. // Get position similar to $(".contentPadding").position().top
  377. var rect = contentPadding.getBoundingClientRect();
  378. var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
  379. div.style.top = (rect.top + scrollTop) + "px";
  380. div.style.height = document.documentElement.scrollHeight * 1.02 - (rect.top + scrollTop) + "px";
  381. }
  382.  
  383. div.style.width = youdao_width + "px";
  384.  
  385. var iframe = document.createElement('iframe');
  386. iframe.style.position = "relative";
  387. iframe.style.top = (-youdao_top_padding) + "px";
  388. iframe.style.left = (-youdao_left_padding) + "px";
  389. iframe.src = "https://dict.youdao.com/w/" + wd.replace(/\+/g, ' ');
  390. iframe.frameBorder = "0";
  391. iframe.scrolling = "no";
  392. iframe.width = (youdao_left_padding + youdao_width) + "px";
  393. iframe.height = document.documentElement.scrollHeight * 1.02 + "px";
  394.  
  395. div.appendChild(iframe);
  396. document.body.appendChild(div);
  397. } else {
  398.  
  399. var bgdiv = document.createElement('div');
  400. bgdiv.style.overflow = "hidden";
  401. bgdiv.style.position = "absolute";
  402. bgdiv.style.left = "0px";
  403.  
  404. var header = document.getElementById("b_header");
  405. if (header) {
  406. bgdiv.style.top = (header.offsetHeight + 25) + "px";
  407. bgdiv.style.height = document.documentElement.scrollHeight-(header.offsetHeight + 25) + "px";
  408. bgdiv.style.width = header.offsetWidth + "px";
  409.  
  410. //bgdiv.height = document.documentElement.scrollHeight + "px";
  411.  
  412. var iframe = document.createElement('iframe');
  413. iframe.width = header.offsetWidth + "px";
  414. iframe.style.position = "relative";
  415. iframe.style.top = (-youdao_top_padding) + "px";
  416. iframe.src = "https://www.youdao.com/w/" + wd.replace(/\+/g, ' ');
  417. iframe.frameBorder = "0";
  418. iframe.scrolling = "no";
  419. iframe.height = document.documentElement.scrollHeight + "px";
  420.  
  421. bgdiv.appendChild(iframe);
  422. document.body.appendChild(bgdiv);
  423.  
  424. // Create additional empty div
  425. var emptyDiv = document.createElement('div');
  426. emptyDiv.style.overflow = "hidden";
  427. emptyDiv.style.position = "absolute";
  428. emptyDiv.style.backgroundColor = "#fcfcfe";
  429. emptyDiv.style.left = "810px";
  430. emptyDiv.style.top = (header.offsetHeight + 50) + "px";
  431. emptyDiv.style.width = (header.offsetWidth - 850) + "px";
  432. emptyDiv.style.height = (document.documentElement.scrollHeight - 250) + "px";
  433.  
  434. document.body.appendChild(emptyDiv);
  435. }
  436. }
  437. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址