Google Image Search Context Menu

Add Search Image context menu

当前为 2014-06-27 提交的版本,查看 最新版本

  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.1
  9. // @icon http://lkytal.qiniudn.com/ic.ico
  10. // @grant GM_openInTab
  11. // @homepageURL https://git.oschina.net/coldfire/GM
  12. // ==/UserScript==
  13.  
  14. if (!("contextMenu" in document.documentElement && "HTMLMenuItemElement" in window)) return;
  15.  
  16. var body = document.body;
  17. body.addEventListener("contextmenu", initMenu, false);
  18.  
  19. var menu = body.appendChild(document.createElement("menu"));
  20. menu.outerHTML = '<menu id="userscript-search-by-image" type="context">\
  21. <menuitem id="SearchGoogle" label="Search this image"\
  22. icon="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAAElSURBVDiNY/z//z8DJYCRkIKsthv/kRX9Z2BgmFalARdiIcaGKZXqcH5O+01U+ay2G3MYGBiSiXUmmofnsBDSjEUTMkiBe2Eq1JnZ7TcZBHhZGNythBl0lLkZODmYGX7++sdw/sZnhl3H3zF8+voHwwsYFkR5ijNICLMzTF31hOHnr38MHGxMDJlhMgwv3vxkWL7jJYpaJmzu0lTigWtmYGBg+PHrH8P0VU8YtJV5MNRiNYCfmxmuGQZ+/PrHwMmOqRyrAX///WfgYEOV4mBjwjAUpwHHL31iyA6XgRvCwcbEkBUmw3DuxmcMtVgDkYONicHLVoTBSJOXgYONieHHz38Ml+98Ydh88DXDtx//CBtACmBiYGCYS4H+OYyU5kasgUgKAADN8WLFzlj9rgAAAABJRU5ErkJggg==">\
  23. </menuitem>\
  24. <menuitem id="SearchBaidu" label="Search this Baidu"></menuitem>\
  25. </menu>';
  26.  
  27. document.querySelector("#SearchGoogle").addEventListener("click", searchImage, false);
  28. document.querySelector("#SearchBaidu").addEventListener("click", search_baidu, false);
  29.  
  30. function initMenu(aEvent)
  31. {
  32. // Executed when user right click on web page body
  33. // aEvent.target is the element you right click on
  34. var node = aEvent.target;
  35. var item = document.querySelectorAll("#userscript-search-by-image menuitem");
  36.  
  37. if (node.localName == "img")
  38. {
  39. body.setAttribute("contextmenu", "userscript-search-by-image");
  40.  
  41. for (var i = item.length - 1; i > -1; i--)
  42. {
  43. item[i].setAttribute("imageURL", node.src);
  44. }
  45. }
  46. else
  47. {
  48. body.removeAttribute("contextmenu");
  49. //item.removeAttribute("imageURL");
  50. }
  51. }
  52.  
  53. function addParamsToForm(aForm, aKey, aValue)
  54. {
  55. var hiddenField = document.createElement("input");
  56. hiddenField.setAttribute("type", "hidden");
  57. hiddenField.setAttribute("name", aKey);
  58. hiddenField.setAttribute("value", aValue);
  59. aForm.appendChild(hiddenField);
  60. }
  61.  
  62. function searchImage(aEvent)
  63. {
  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. {
  70. var base64Offset = imageURL.indexOf(",");
  71. if (base64Offset != -1)
  72. {
  73. var inlineImage = imageURL.substring(base64Offset + 1).replace(/\+/g, "-").replace(/\//g, "_").replace(/\./g, "=");
  74.  
  75. var form = document.createElement("form");
  76. form.setAttribute("method", "POST");
  77. form.setAttribute("action", "//www.google.com.hk/searchbyimage/upload");
  78. form.setAttribute("enctype", "multipart/form-data");
  79. form.setAttribute("target", "_blank");
  80. addParamsToForm(form, "image_content", inlineImage);
  81. addParamsToForm(form, "filename", "");
  82. addParamsToForm(form, "image_url", "");
  83. body.appendChild(form);
  84. form.submit();
  85. }
  86. }
  87. else
  88. {
  89. GM_openInTab("http://www.google.com.hk/searchbyimage?image_url=" + encodeURIComponent(imageURL));
  90. }
  91. }
  92.  
  93.  
  94. function search_baidu(aEvent)
  95. {
  96. var imageURL = aEvent.target.getAttribute("imageURL");
  97.  
  98. GM_openInTab("http://stu.baidu.com/i?objurl=" + encodeURIComponent(imageURL) + "&filename=&rt=0&rn=10&ftn=searchstu&ct=1&stt=0&tn=shituresult");
  99. }