Google Image Direct View

A different take on Google direct image viewer

目前為 2022-07-02 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name Google Image Direct View
  3. // @version 3.2
  4. // @namespace Google_Image_Direct_View
  5. // @description A different take on Google direct image viewer
  6. // @author navchandar
  7. // @include https://www.google.tld/*tbm=isch*
  8. // @include https://www.google.tld/search?tbm=isch*
  9. // @include https://www.google.co.*/*tbm=isch*
  10. // @include https://www.google.co.*/search?tbm=isch*
  11. // @match https://lens.google.com/search*
  12. // @run-at document-end
  13. // @license MIT
  14. // @grant none
  15. // @homepage https://navchandar.github.io/
  16. // @homepage https://github.com/navchandar/
  17. // @homepageURL https://navchandar.github.io/
  18. // @contributionURL https://paypal.me/navchandar
  19. // @contributionAmount $1.00
  20. // @copyright 2019+, navchandar (https://openuserjs.org/users/navchandar)
  21. // @supportURL https://openuserjs.org/scripts/navchandar/Google_Image_Direct_View/issues
  22. // @setupURL https://openuserjs.org/install/navchandar/Google_Image_Direct_View.user.js
  23. // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAMAAAD04JH5AAAAYFBMVEUAAAAAzAAAzAAAzAAAywAAzQAAzgAAzAAAzAAAzAAAzgAAzAAAzgAAzAAAywAAywAAzAD///9/5X8/2D+f65/v++8v1S+/8r8f0h/P9c/f+N9f31+v76+P6I9v4m9P20/YL+UMAAAAEHRSTlMAD++/z38v359vH18/r49PSnNavQAAA7hJREFUeNrt2wuSoyAUBVDAH6LGi79oYtL73+XMVGUqncJEHiJOV81ZQHOVx2uDyJykZZ6com9OSV6mLIi0kDHeiGWxbwqeVwIrRJVztguVx7AU54r5VlcgqWq/tz4DWeZtKvhJwIk4eYmQYINk+9wLbCLqbYu+wmbVhtaQw4vcdeHH8CR2agulgDeiPOj2u08Dj+FZzKnjH5kgFdiBSInjH5ZACexEqLDzT68D+vj0BMTxwyeQ2Jmkjh82QYEAilANgN4OeIYgMh6kAOhlUCOYenECBIIRS5NQIaCKGUoEZT6jZQgqM3//BJYEqEBKHSYILjnwBpi3IMEBksOWgLkQCgRl/l+OQNfeu/NF/3U5N9cRRBF7UKAau4s2TQ0xg3Itwat+o7+BInErwWHS7/UD7GVOM3Dt9ScXSgLlsBPQ6RV9C2s5fQ1Met2AJ5t1AM/j6x7WqE8inbYyw1ZJW4T31wudr4+bPX7N+kULSwmpBIaXQW7ja2t6aUkgFIGArfPH1Ta71KFgjMNWa1zi+wLpYIkTanBe63ezw0Io7dvQqJ++sGTs6XOQs8RhCZyxrHnUx9wQlkEFS5f1yxv11N1bUFQsAnkGJvgTrQcwnwHu8CdiWGMushEeWQc405aY/wDGGiDwHKADgYcARh9uQBAgQNssCheg0Yv+B7AOkB0bILNoxUYf8BkgOj6AxArzv7HPANLigcR4Ih09BkjWd0fMca74bmyfOnKAgpX0ddjZpISdknGQq7D3GIDb/zCZjTnwEEAw5vJMdvEWIKL8OO2NZrg9QEL5eX7TT4OnACVpg6LXK2XQkPsAaYvm+feXn82HM7kRRcRNqunDNsjQETvhc5MqBQjN6KnvWjy03eTUilPiRqXZ989/TLT/BeZ++QnWOm1pgoXTI0AK7wluljPwEHtOcGlhI3Z7YXHv/Vw+UDi+sxrP+oO+gSXBnV9ajd3bm/8cnvTSSoFouC1MxHQFhdp4duHrNn2/9Pk6gET6eHU7tA8gE/zfenkd/OWt4AGOEBEPE8UIKGYmhYAU/RC5/wo8cBLiQGc56Sc7awRRs7dOCODEPqiwu+qQI6XmodKjzhRmPPSxavM0ZegE9MPdaYydxGnow/1m/R2ZIOY/5wOH3wkkPJOk8f0/IRWMLBVhl59JRfAkUj/zU69/4GO33/IMm2T59u8tsYGXby65FHAiJGd+KClchlfMH15kIMkKzjwrJazJku2ilhlWZbJmO1KFzD4NXii2P17mSRThRRQleeky7b8AeEEvYPjorH8AAAAASUVORK5CYII=
  24. // ==/UserScript==
  25.  
  26. // Updated image xpath locator to work on Google Images and Google Lens
  27. var img_locator = "//c-wiz[@jsname]/parent::div[not(contains(@style, 'display: none'))]//a[(contains(@jsaction, 'focus'))]//img | //c-wiz[@jsname]/parent::div[not(contains(@style, 'display: none'))]//a//img[(contains(@jsaction, 'load'))]";
  28. var lens_locator1 = "//a/div//img[not(contains(@alt, 'tag') or contains(@alt, 'domain'))]";
  29. var lens_locator2 = "//a/div/img";
  30.  
  31. function getElementsByXPath(xpath, parent) {
  32. let results = [];
  33. let query = document.evaluate(xpath, parent || document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
  34. for (let i = 0, length = query.snapshotLength; i < length; ++i) {
  35. results.push(query.snapshotItem(i));
  36. }
  37. return results;
  38. }
  39.  
  40. function has(String, search) {
  41. try {
  42. if (String.indexOf(search) > -1) {
  43. return !0
  44. }
  45. }
  46. catch (err) {}
  47. return !1
  48. }
  49.  
  50. function is_lens() {
  51. return has(window.location.href, "lens.google.")
  52. }
  53.  
  54. function get_img_locator() {
  55. let imgXpath = "";
  56. if (is_lens()) {
  57. imgXpath = lens_locator1 + " | " + lens_locator2;
  58. }
  59. else {
  60. imgXpath = img_locator;
  61. }
  62. return imgXpath;
  63. }
  64.  
  65. function get_img_link_locator() {
  66. let linkXpath = "";
  67. if (is_lens()) {
  68. linkXpath = lens_locator2 + "//../../../a[@href] | " + lens_locator1 + "//../../../../../a[@href]";
  69. }
  70. else {
  71. linkXpath = img_locator + "//../../../a[@href] | " + img_locator + "//../../a[@href]"
  72. }
  73. return linkXpath;
  74. }
  75.  
  76. function UpdateElements() {
  77. var int = 0;
  78. let imgXpath = get_img_locator();
  79. let linkXpath = get_img_link_locator()
  80. var Img_items = getElementsByXPath(imgXpath);
  81. console.log(Img_items.length.toString() + " Image items found");
  82.  
  83. if (Img_items.length > 0) {
  84. var Link_items = getElementsByXPath(linkXpath);
  85. // console.log(Link_items.length.toString() + " Image items found");
  86.  
  87. for (var i = 0; i < Img_items.length; i++) {
  88. try {
  89. var src = Img_items[i].src;
  90. var uri = Link_items[i].href;
  91. if (uri != src) {
  92. int++;
  93. Link_items[i].title = "Image Loading... Wait..."
  94.  
  95. if (has(src, "data:image")) {
  96. Link_items[i].href = src;
  97. Link_items[i].download = "Base64_Image.jpg";
  98. }
  99. else if (has(src, "https://encrypted") && is_lens()) {
  100. Link_items[i].href = src;
  101. }
  102. else {
  103. Link_items[i].href = src;
  104. }
  105. }
  106. else {
  107. Link_items[i].title = "Image URL updated!"
  108. }
  109. }
  110. catch (err) {
  111. console.log(err);
  112. }
  113. }
  114. if (int > 0) {
  115. console.log("Updated " + int + " image links.");
  116. }
  117. }
  118. }
  119.  
  120. function addCssToDocument(css) {
  121. var style = document.createElement('style');
  122. style.innerText = css;
  123. document.head.appendChild(style);
  124. }
  125.  
  126. (function () {
  127. 'use strict';
  128. setInterval(function () {
  129. UpdateElements();
  130. }, 500);
  131. })()