Google & baidu Switcher (ALL in One)

分别在百度和google的搜索结果页面增加搜索跳转按钮,使用到外链微软CDN的jquery-1.7.2.min.js,不懂跳墙使用GOOGLE的同学请自动忽略。自动判断百度和google对JQUERY的载入,并动态载入Jquery.js。

当前为 2019-05-27 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Google & baidu Switcher (ALL in One)
  3. // @namespace https://openuserjs.org/scripts/t3xtf0rm4tgmail.com/Google_baidu_Switcher_(ALL_in_One)
  4. // @author F9y4ng
  5. // @version 1.5.0.0
  6. // @description 分别在百度和google的搜索结果页面增加搜索跳转按钮,使用到外链微软CDN的jquery-1.7.2.min.js,不懂跳墙使用GOOGLE的同学请自动忽略。自动判断百度和google对JQUERY的载入,并动态载入Jquery.js。
  7. // @icon data:image/x-icon;base64,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
  8. // @include /^https?\:\/\/[a-zA-Z0-9]*.google.[^\/]+/
  9. // @include http://www.baidu.com/*
  10. // @include https://www.baidu.com/*
  11. // @license MPL-2.0
  12. // @copyright 2015+, f9y4ng
  13. // @grant none
  14.  
  15. // ==/UserScript==
  16.  
  17. if ("undefined" == typeof (jQuery)) {
  18. loadJs("for_google", "https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.2.min.js", callbackFunction);
  19. }
  20. else {
  21. $(document).ready(function () {
  22. function baiduswitchgoogle() {
  23. $('.s_btn_wr').after('<div class="s_btn_wr bg" style="display:inline-block;margin-left:10px">\
  24. <input type="button" id="ggyx" value="Google一下" class="bg s_btn" ></div>');
  25. $('#ggyx').on({
  26. click: function () {
  27. var BSurl = GetUrlParam("tn"); //百度几个频道的命名和参数可以人道毁灭了,图片搜索没心情兼容。
  28. switch (BSurl) {
  29. case "news":
  30. BSurl = "tbm=nws&q=";
  31. break;
  32. case "vsearch":
  33. BSurl = "tbm=vid&q=";
  34. break;
  35. default:
  36. BSurl = "q=";
  37. }
  38. window.open("https://www.google.com/search?newwindow=1&hl=zh-CN&source=hp&" + BSurl + encodeURIComponent($('#kw').val()));
  39. return false;
  40. }
  41. });
  42. }
  43. if (GetUrlParam("wd").length > 0 || window.location.href.lastIndexOf("/s?") > 0) {
  44. baiduswitchgoogle();
  45. }
  46. //2018/11/07 F9y4ng 检测从baidu首页进入的搜索
  47. if (/^http(s)?:\/\/(www\.)?baidu\.com\/$/ig.test(window.location.href)) {
  48. $("#kw").on("blur", function () {
  49. if ($('#kw').val().length > 0) {
  50. setTimeout(function () {
  51. if ($('#ggyx').length < 1 && GetUrlParam("wd").length > 0) {
  52. baiduswitchgoogle();
  53. }
  54. }, 600);
  55. }
  56. });
  57. }
  58. });
  59. }
  60.  
  61. function callbackFunction() {
  62. $(document).ready(function () {
  63. function googleswitchbaidu() {
  64. $('#tsf').prepend('<div id="sfdiv_bd" style="display:inline-block;position:relative;height:0px;width:110px;right:-115px;\
  65. top:0px;float:right;"><button id="bdyx" class="lsbb kpbb" style="width:120px;height:49px;margin-top:-2px;cursor:pointer;\
  66. display: flex;border-radius: 8px;border: 1px solid #dfe1e5;box-shadow: none;border-radius: 24px;" type="button"><span \
  67. class="sbico" id="bdyxss" style="color:#fff;">\
  68. <svg style="fill: #fff;" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"\
  69. width="18px" height="18px" viewBox="0 0 64 64" xml:space="preserve">\
  70. <path d="M62.243,53.758L44.658,36.173C46.768,32.602,48,28.449,48,24C48,10.745,37.255,0,24,0S0,10.745,0,24s10.745,24,24,24\
  71. c4.449,0,8.602-1.232,12.173-3.342l17.584,17.584C54.843,63.329,56.343,64,58,64c3.314,0,6-2.686,6-6\
  72. C64,56.343,63.328,54.843,62.243,53.758z M24,42c-9.941,0-18-8.059-18-18c0-9.941,8.059-18,18-18c9.941,0,18,8.059,18,18\
  73. C42,33.941,33.941,42,24,42z"/></svg></span>\
  74. <span id="bdyxwz" style="font-size: 16px; margin-left:26px">百度一下</span></button></div>');
  75. $('#sfdiv_bd').off("click").on({
  76. click: function () {
  77. var kw = $('input[name="q"]').val();
  78. //获取属性标签容错
  79. if ("undefined" == typeof (kw)) {
  80. kw = GetUrlParam("q");
  81. }
  82. var GSurl = GetUrlParam("tbm");
  83. switch (GSurl) {
  84. case "isch":
  85. GSurl = "https://image.baidu.com/search/index?tn=baiduimage&ie=utf-8&word=";
  86. break;
  87. case "vid":
  88. GSurl = "https://www.baidu.com/sf/vsearch?pd=video&tn=vsearch&ie=utf-8&wd=";
  89. break;
  90. case "nws":
  91. GSurl = "https://www.baidu.com/s?tn=news&rtt=4&bsst=1&cl=2&wd=";
  92. break;
  93. default:
  94. GSurl = "https://www.baidu.com/s?ie=utf-8&rqlang=cn&wd=";
  95. }
  96. window.open(GSurl + encodeURIComponent(kw));
  97. return false;
  98. }
  99. });
  100. }
  101. if (window.location.hash.lastIndexOf("q=") > 0 || window.location.search.lastIndexOf("q=") > 0) {
  102. googleswitchbaidu();
  103. }
  104. //2019/05/21 F9y4ng 修正GOOGLE首页自动提交搜索优先级
  105. if (/^http(s)?:\/\/(www\.)?google\.\w+(\.\w+)?\/$/ig.test(window.location.href) || GetUrlParam("q") === null || GetUrlParam("q") === "") {
  106. var gfm = $('input[name="q"]');
  107. if ("undefined" == typeof (gfm)) {
  108. gfm = $("input[role='combobox']");
  109. }
  110. gfm.off('click').on({
  111. blur: function () {
  112. if (gfm.val().length > 0) {
  113. setTimeout(function () {
  114. $("form").submit();
  115. }, 200);
  116. }
  117. }
  118. });
  119. }
  120. var ua = myBrowser();
  121. if (GetUrlParam("tbm") !== "" && GetUrlParam("tbm") !== null) {
  122. $('#bdyxwz').css('margin-left', '2px');
  123. }
  124. if (ua == "FF" || ua == "Edge") {
  125. $('#bdyxwz').css('margin-top', '10px');
  126. $('#bdyxss').css('margin', '15px 2px 0 4px');
  127. }
  128. else {
  129. $('#bdyxwz').css('margin-top', '0px');
  130. $('#bdyxss').css('margin', '4px 2px 0 4px');
  131. }
  132. var elm = $('#bdyx');
  133. var startPos = $(elm).offset().top;
  134. $.event.add(window, "scroll", function () {
  135. var p = $(window).scrollTop();
  136. $(elm).css('height', ((p) > startPos - 5) ? '37px' : '49px');
  137. if (ua == "FF" || ua == "Edge") {
  138. $('#bdyxwz').css('margin-top', ((p) > startPos) ? '5px' : '10px');
  139. $('#bdyxss').css('margin', ((p) > startPos) ? '10px 2px 0 4px' : '15px 2px 0 4px');
  140. }
  141. if (GetUrlParam("tbm") !== "" && GetUrlParam("tbm") !== null) {
  142. $('#bdyx').css('margin-top', ((p) > startPos) ? '8px' : '-2px');
  143. }
  144. });
  145. });
  146. }
  147.  
  148. function loadJs(sid, jsurl, callback) {
  149. var nodeHead = document.getElementsByTagName('head')[0];
  150. var nodeScript = null;
  151. if (document.getElementById(sid) === null) {
  152. nodeScript = document.createElement('script');
  153. nodeScript.setAttribute('type', 'text/javascript');
  154. nodeScript.setAttribute('src', jsurl);
  155. nodeScript.setAttribute('id', sid);
  156. if (callback !== null) {
  157. nodeScript.onload = nodeScript.onreadystatechange = function () {
  158. if (nodeScript.ready) {
  159. return false;
  160. }
  161. if (!nodeScript.readyState || nodeScript.readyState == "loaded" || nodeScript.readyState == 'complete') {
  162. nodeScript.ready = true;
  163. callback();
  164. }
  165. };
  166. }
  167. nodeHead.appendChild(nodeScript);
  168. }
  169. else {
  170. if (callback !== null) {
  171. callback();
  172. }
  173. }
  174. }
  175.  
  176. function GetUrlParam(paraName) {
  177. var url = document.location.toString();
  178. var arrObj = url.split("?");
  179. if (arrObj.length > 1) {
  180. var arrPara = arrObj[1].split("&");
  181. var arr;
  182. for (var i = 0; i < arrPara.length; i++) {
  183. arr = arrPara[i].split("=");
  184. if (arr !== null && arr[0] == paraName) {
  185. return arr[1];
  186. }
  187. }
  188. return "";
  189. }
  190. else {
  191. return "";
  192. }
  193. }
  194.  
  195. function myBrowser() {
  196. var userAgent = navigator.userAgent;
  197. if (userAgent.indexOf("Firefox") > -1) {
  198. return "FF";
  199. }
  200. if (userAgent.indexOf("Edge") > -1) {
  201. return "Edge";
  202. }
  203. }