Google Image Search Context Menu

Add Search Image context menu

当前为 2014-05-17 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Google Image Search Context Menu
  3. // @namespace lkytal
  4. // @description Add Search Image context menu
  5. // @author lkytal
  6. // @license GPL
  7. // @include *
  8. // @version 3.0.0
  9. // @icon http://lkytal.qiniudn.com/ic.ico
  10. // @grant GM_openInTab
  11. // @homepageURL https://greasyfork.org/scripts/344-google-image-search-context-menu
  12. // @require http://code.jquery.com/jquery-2.1.0.min.js
  13. // ==/UserScript==
  14.  
  15. if (!("contextMenu" in document.documentElement && "HTMLMenuItemElement" in window)) return;
  16.  
  17. var body = document.body;
  18. body.addEventListener("contextmenu", initMenu, false);
  19.  
  20. var menu = body.appendChild(document.createElement("menu"));
  21. menu.outerHTML = '<menu id="userscript-search-by-image" type="context">\
  22. <menuitem id="SearchGoogle" label="Search this image"\
  23. icon="data:image/png;base64,\
  24. iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\
  25. AAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAEl\
  26. SURBVDiNY/z//z8DJYCRkIKsthv/kRX9Z2BgmFalARdiIcaGKZXqcH5O+01U+ay2G3MYGBiSiXUm\
  27. mofnsBDSjEUTMkiBe2Eq1JnZ7TcZBHhZGNythBl0lLkZODmYGX7++sdw/sZnhl3H3zF8+voHwwsY\
  28. FkR5ijNICLMzTF31hOHnr38MHGxMDJlhMgwv3vxkWL7jJYpaJmzu0lTigWtmYGBg+PHrH8P0VU8Y\
  29. tJV5MNRiNYCfmxmuGQZ+/PrHwMmOqRyrAX///WfgYEOV4mBjwjAUpwHHL31iyA6XgRvCwcbEkBUm\
  30. w3DuxmcMtVgDkYONicHLVoTBSJOXgYONieHHz38Ml+98Ydh88DXDtx//CBtACmBiYGCYS4H+OYyU\
  31. 5kasgUgKAADN8WLFzlj9rgAAAABJRU5ErkJggg=="></menuitem>\
  32. <menuitem id="SearchBaidu" label="Search this Baidu"></menuitem>\
  33. </menu>';
  34.  
  35. document.querySelector("#SearchGoogle").addEventListener("click", searchImage, false); //#userscript-search-by-image menuitem
  36.  
  37. document.querySelector("#SearchBaidu").addEventListener("click", search_baidu, false); //#userscript-search-by-image menuitem
  38.  
  39. function initMenu(aEvent) {
  40. // Executed when user right click on web page body
  41. // aEvent.target is the element you right click on
  42. var node = aEvent.target;
  43. //var item = document.querySelector("#userscript-search-by-image menuitem");
  44.  
  45. if (node.localName == "img") {
  46. body.setAttribute("contextmenu", "userscript-search-by-image");
  47. //item.setAttribute("imageURL", node.src);
  48. $("#userscript-search-by-image menuitem").attr("imageURL", node.src);
  49. } else {
  50. body.removeAttribute("contextmenu");
  51. //item.removeAttribute("imageURL");
  52. }
  53. }
  54.  
  55. function addParamsToForm(aForm, aKey, aValue) {
  56. var hiddenField = document.createElement("input");
  57. hiddenField.setAttribute("type", "hidden");
  58. hiddenField.setAttribute("name", aKey);
  59. hiddenField.setAttribute("value", aValue);
  60. aForm.appendChild(hiddenField);
  61. }
  62.  
  63. function searchImage(aEvent) {
  64. // Executed when user click on menuitem
  65. // aEvent.target is the <menuitem> element
  66. var imageURL = aEvent.target.getAttribute("imageURL");
  67.  
  68. if (imageURL.indexOf("data:") == 0) {
  69. var base64Offset = imageURL.indexOf(",");
  70. if (base64Offset != -1) {
  71. var inlineImage = imageURL.substring(base64Offset + 1).replace(/\+/g, "-").replace(/\//g, "_").replace(/\./g, "=");
  72.  
  73. var form = document.createElement("form");
  74. form.setAttribute("method", "POST");
  75. form.setAttribute("action", "//www.google.com.hk/searchbyimage/upload");
  76. form.setAttribute("enctype", "multipart/form-data");
  77. form.setAttribute("target", "_blank");
  78. addParamsToForm(form, "image_content", inlineImage);
  79. addParamsToForm(form, "filename", "");
  80. addParamsToForm(form, "image_url", "");
  81. body.appendChild(form);
  82. form.submit();
  83. }
  84. } else {
  85. GM_openInTab("http://www.google.com.hk/searchbyimage?image_url=" + encodeURIComponent(imageURL));
  86. }
  87. }
  88.  
  89.  
  90. function search_baidu(aEvent) {
  91. var imageURL = aEvent.target.getAttribute("imageURL");
  92.  
  93. GM_openInTab("http://stu.baidu.com/i?objurl=" + encodeURIComponent(imageURL) + "&filename=&rt=0&rn=10&ftn=searchstu&ct=1&stt=0&tn=shituresult");
  94. }