duckduckgo script

make duckduckgo convenient

  1. // ==UserScript==
  2. // @name duckduckgo script
  3. // @namespace http://duckduckgo.com/
  4. // @version 2.0
  5. // @description make duckduckgo convenient
  6. // @author charles
  7. // @match https://duckduckgo.com/?q=*
  8. // @match https://duckduckgo.com/?t=*
  9. // @icon https://www.google.com/s2/favicons?domain=duckduckgo.com
  10. // @grant GM_addStyle
  11. // ==/UserScript==
  12.  
  13. GM_addStyle(`
  14. .result__title > .result__a,.result__title > .result__a:hover, .result__title > .result__a:active {
  15. color: rgb(105, 151, 244) !important;
  16. }
  17. .result__title > .result__a:visited, .result__title > .result__a:visited:hover {
  18. color: rgb(202, 97, 255) !important;
  19. }
  20. .result__body > .result__snippet > b {
  21. color: red !important;
  22. }
  23. .highlight{
  24. cursor: inherit !important;
  25. }
  26. `);
  27.  
  28. (function () {
  29. "use strict";
  30.  
  31. // Your code here...
  32. let pre_result_length = 0;
  33. let counter = 0;
  34. let change_result_node = function () {
  35. let result = document.getElementsByClassName("results_links_deep");
  36. let links = document.getElementById("links");
  37. if (result.length <= pre_result_length && counter < 100) {
  38. setTimeout(() => {
  39. counter = counter + 1;
  40. change_result_node();
  41. }, 50);
  42. } else {
  43. counter = 0;
  44. pre_result_length = result.length;
  45. for (let i = 0; i < result.length; i++) {
  46. let clone_result = result[i].cloneNode(true);
  47. let img_parent = result[i].getElementsByClassName(
  48. "result__extras__url"
  49. )[0];
  50. let img = img_parent.getElementsByClassName("result__icon")[0];
  51. clone_result
  52. .getElementsByClassName("result__extras__url")[0]
  53. .replaceChild(
  54. img,
  55. clone_result.getElementsByClassName("result__icon")[0]
  56. );
  57. links.replaceChild(clone_result, result[i]);
  58. }
  59. add_listener_to_more_result(0);
  60. }
  61. };
  62. let add_listener_to_more_result = function (time) {
  63. let more_result_node = document.getElementsByClassName("result--more__btn");
  64. if (more_result_node[0] === undefined && time < 100) {
  65. setTimeout(() => {
  66. add_listener_to_more_result(time + 1);
  67. }, 50);
  68. } else if (more_result_node[0] !== undefined) {
  69. more_result_node[0].addEventListener("click", () => {
  70. change_result_node();
  71. add_side_bar();
  72. });
  73. }
  74. };
  75. let link_list = undefined;
  76. let record_add_side_bar_index = 0;
  77. let add_side_bar = function () {
  78. let width = document.querySelector(".sidebar-modules").getBoundingClientRect().width;
  79. let result_extra = document.querySelectorAll(".results_links_deep");
  80. let result_a = document.querySelectorAll(".result__title");
  81. if (result_extra.length <= record_add_side_bar_index && counter < 100) {
  82. setTimeout(() => {
  83. counter = counter + 1;
  84. add_side_bar();
  85. }, 50);
  86. } else {
  87. let add_div_function = () => {
  88. let ul = link_list.querySelector(".link_list");
  89. if (ul == null) {
  90. ul = document.createElement("ul")
  91. ul.setAttribute("class", "link_list");
  92. }
  93. for (let i = record_add_side_bar_index; i < result_extra.length; i++) {
  94. let div = document.createElement("div");
  95. let item = result_extra[i].querySelector(".result__extras__url").cloneNode(true);
  96. let icon = item.querySelector("span").querySelector("a").querySelector("img");
  97. let data_src = icon.getAttribute("data-src");
  98. if (data_src != null) {
  99. icon.src = data_src;
  100. }
  101. let title = result_a[i].cloneNode(true);
  102. div.appendChild(item);
  103. div.appendChild(title);
  104. ul.appendChild(div);
  105. }
  106. record_add_side_bar_index = result_extra.length;
  107. link_list.appendChild(ul);
  108. }
  109. if (link_list === undefined) {
  110. link_list = document.createElement("div");
  111. link_list.className = "link_list";
  112. link_list.style.width = width.toString() + "px";
  113. link_list.style.border = "1px solid";
  114. link_list.style.borderRadius = "5px";
  115. link_list.style.maxHeight = "300px";
  116. link_list.style.zIndex = "999";
  117. link_list.style.overflow = "auto";
  118. add_div_function();
  119. side_bar_div.appendChild(link_list);
  120. } else {
  121. add_div_function()
  122. }
  123. }
  124. }
  125. const side_bar_div = document.querySelector(".results--sidebar");
  126. const duckbar = document.querySelector(".zcm-wrap-wrap");
  127. window.onscroll = function () {
  128. let side_module = side_bar_div.querySelector(".module");
  129. if (side_module == null)
  130. side_module = side_bar_div.querySelector(".sidebar-modules");
  131. if (link_list !== undefined && side_module != null) {
  132. let top_div = side_module.getBoundingClientRect();
  133. let zoom = duckbar.getBoundingClientRect();
  134. if (top_div.bottom < 0 || top_div.bottom < zoom.bottom) {
  135. link_list.style.position = "fixed";
  136. if (zoom.bottom >= 0) {
  137. link_list.style.top = (zoom.bottom + 10) + "px";
  138. } else {
  139. link_list.style.top = "0";
  140. }
  141. } else {
  142. link_list.style.position = "relative";
  143. link_list.style.top = "0";
  144. }
  145. }
  146. };
  147. document.onreadystatechange = function () {
  148. if (document.readyState === "complete") {
  149. change_result_node();
  150. add_side_bar();
  151. }
  152. };
  153. })();

QingJ © 2025

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