Google Image Search Context Menu

Add 'Search by Image' in browser context menu when you right click on image to search Google with that image.

当前为 2014-04-07 提交的版本,查看 最新版本

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