Restore View Image Button for Google

Restores the 'View Image' button on Google Image search. Beta, report back issues!

  1. // ==UserScript==
  2. // @name Restore View Image Button for Google
  3. // @namespace David Refoua <www.Refoua.me>
  4. // @author David Refoua
  5. // @description Restores the 'View Image' button on Google Image search. Beta, report back issues!
  6. // @include http://*.google.tld/*isch*
  7. // @include https://*.google.tld/*isch*
  8. // @version 0.1.3.1-beta
  9. // @license MIT
  10. // ==/UserScript==
  11.  
  12. var resetViewBtn = (function() {
  13. 'use strict';
  14.  
  15. var getCousins = function(node, selector) {
  16.  
  17. var found = null;
  18.  
  19. while ( (parent = node.parentNode) && ( parent != node ) ) {
  20.  
  21. node = parent;
  22. var list = node.querySelectorAll(selector);
  23. if ( list.length > 0 ) {
  24. found = list;
  25. break;
  26. }
  27.  
  28. }
  29.  
  30. return found;
  31.  
  32. };
  33.  
  34. var getImageLink = function(node) {
  35.  
  36. /*
  37. var image_nodes = getCousins(node, '.irc_mi');
  38.  
  39. for (var i in image_nodes) if ( image_nodes.hasOwnProperty(i) ) {
  40. var image_item = image_nodes[i];
  41.  
  42. var image_source = image_item.getAttribute('src');
  43. if ( !image_source ) return image_source;
  44. }
  45. */
  46.  
  47. var related_nodes = getCousins(node, '.irc_rimask');
  48.  
  49. for (var j in related_nodes) if ( related_nodes.hasOwnProperty(j) ) {
  50. var related_item = related_nodes[j];
  51.  
  52. if ( related_item.classList.contains('irc_rist') ) {
  53.  
  54. var target_image = related_item.querySelector('.target_image');
  55.  
  56. var x, the_source;
  57.  
  58. if ( target_image && ( x = target_image.parentNode ) && ( the_source = x.getAttribute('href') ) )
  59. {
  60. var image_match = the_source.match( /imgurl=([^\&]+)\&/i );
  61.  
  62. if ( image_match && image_match.length > 0 ) {
  63.  
  64. var image_link = image_match[1];
  65. while ( decodeURIComponent(image_link) != image_link ) image_link = decodeURIComponent(image_link);
  66.  
  67. return image_link;
  68.  
  69. }
  70.  
  71. }
  72.  
  73. }
  74.  
  75. }
  76.  
  77. return null;
  78. };
  79. var bottom_buttons = document.querySelectorAll('.irc_but_r');
  80.  
  81. for ( var i = 0; i < bottom_buttons.length; i++ ) {
  82.  
  83. var the_table = bottom_buttons[i];
  84. var img_addr = getImageLink(the_table);
  85. var visit_button_container = the_table.querySelector('.irc_vpl').parentNode;
  86. var view_image_button = visit_button_container.querySelector('.irc_view_image');
  87. if ( !view_image_button ) {
  88. var new_button = document.createElement("a");
  89. view_image_button = visit_button_container.appendChild(new_button);
  90. view_image_button.classList.add('irc_view_image');
  91. // TODO: use the waybackmachine to find what google originally used instead of `.irc_view_image`
  92. }
  93. view_image_button.style.display = ( img_addr ? '' : 'none' );
  94.  
  95. // view_image_button.innerText = 'View Image';
  96. view_image_button.innerHTML = '<span class="_WKw">View Image</span>';
  97.  
  98. view_image_button.setAttribute('href', img_addr);
  99.  
  100. view_image_button.setAttribute('target', '_blank');
  101. view_image_button.setAttribute('tabindex', '0');
  102.  
  103. }
  104.  
  105. });
  106.  
  107. /*
  108. // TODO: find a valid event and don't use an interval
  109. var eventsList = ['mouseup', 'keyup'];
  110.  
  111. for (var i in eventsList) if ( eventsList.hasOwnProperty(i) ) {
  112. document.addEventListener(eventsList[i], function(e){
  113. if (e.target && e.target.classList && e.target.classList.contains('irc_view_image') == false && e.target.parentNode.classList.contains('irc_view_image') == false )
  114. resetViewBtn();
  115. });
  116. }
  117. */
  118.  
  119. setInterval(resetViewBtn, 500);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址