Google Image Direct View

An different take of Google direct image viewer

目前为 2020-05-25 提交的版本。查看 最新版本

  1. // ==UserScript==
  2. // @name Google Image Direct View
  3. // @version 2.3
  4. // @namespace Google_Image_Direct_View
  5. // @description An different take of Google direct image viewer
  6. // @author navchandar
  7. // @include http*://www.google.*/*tbm=isch*
  8. // @include http*://google.*/*tbm=isch*
  9. // @include https://www.google.*/search?tbm=isch*
  10. // @include https://google.*/search?tbm=isch*
  11. // @include https://www.google.co.*/*tbm=isch*
  12. // @include https://google.co.*/*tbm=isch*
  13. // @run-at document-end
  14. // @license MIT
  15. // @grant none
  16. // @homepage https://github.com/navchandar
  17. // @copyright 2019, navchandar (https://openuserjs.org/users/navchandar)
  18. // @icon data:image/png;base64,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
  19. // ==/UserScript==
  20.  
  21. function getElementsByXPath(xpath, parent) {
  22. let results = [];
  23. let query = document.evaluate(xpath, parent || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
  24. for (let i = 0, length = query.snapshotLength; i < length; ++i) {
  25. results.push(query.snapshotItem(i));
  26. }
  27. return results
  28. };
  29.  
  30. function has(String, search) {
  31. try {
  32. if (String.indexOf(search) > -1) {
  33. return true;
  34. }
  35. }
  36. catch (err) {}
  37. return false;
  38. }
  39.  
  40. function UpdateElements(imgXpath) {
  41. var int = 0;
  42. var Img_items = getElementsByXPath(imgXpath);
  43. console.log(Img_items.length.toString() + " Image items found");
  44.  
  45. if (Img_items.length > 0) {
  46. var Link_items = getElementsByXPath(imgXpath + "//../../../a[@href] | " + imgXpath + "//../../a[@href]");
  47. console.log(Link_items.length.toString() + " Image items found");
  48.  
  49. for (var i = 0; i < Img_items.length; i++) {
  50. try {
  51. var src = Img_items[i].src;
  52. var uri = Link_items[i].href;
  53. if (uri != src) {
  54. int++;
  55. Link_items[i].title = "Image Loading... Wait..."
  56.  
  57. if (has(src, "data:image")) {
  58. //Link_items[i].href = src.replace(/^data:image\/[^;]+/, 'data:application/octet-stream');
  59. Link_items[i].href = src;
  60. Link_items[i].download = "Base64_Image.jpg";
  61.  
  62. }
  63. else if (has(src, "https://encrypted")) {
  64. var uri_enc = encodeURIComponent(uri);
  65. var uri_dec = decodeURIComponent(uri_enc);
  66.  
  67. }
  68. else {
  69. Link_items[i].href = src;
  70. }
  71.  
  72. }
  73. else {
  74. Link_items[i].title = "Image URL updated!"
  75. }
  76. }
  77. catch (err) {
  78. console.log(err);
  79. }
  80. }
  81. if (int > 0) {
  82. console.log("Updated " + int + " image links.");
  83. }
  84. }
  85. }
  86.  
  87. function addCssToDocument(css) {
  88. var style = document.createElement('style')
  89. style.innerText = css
  90. document.head.appendChild(style)
  91. }
  92.  
  93. (function () {
  94. 'use strict';
  95. var img1 = "//a[(contains(@jsaction, 'focus'))]/div/img[contains(@alt, 'Image') or contains(@alt, 'image')]";
  96. var img2 = "//a[(contains(@jsaction, 'focus'))]//img[contains(@alt, 'Image') or contains(@alt, 'image')]";
  97. var img3 = "//a[(contains(@jsaction, 'focus'))]//img[@jsaction]";
  98. setInterval(function () {
  99. UpdateElements(img1);
  100. UpdateElements(img2);
  101. UpdateElements(img3);
  102. }, 1000);
  103.  
  104. })();