NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name View Button // @namespace view-button // @version 0.2.1 // @description Returns back "View Image" button for google images // @author 0xdv // @include /^https://(.*).google.([a-z\.]*)/(imgres|search)(.*)/ // @homepageURL https://github.com/0xdv/make-view-button-back-again // @downloadURL https://raw.githubusercontent.com/0xdv/make-view-button-back-again/master/view-button.user.js // @updateURL https://raw.githubusercontent.com/0xdv/make-view-button-back-again/master/view-button.user.js // @grant none // @license MIT // ==/UserScript== (function () { "use strict"; let buttonWrapperClass = "view_button_wrapper"; let escapeHTMLPolicy = trustedTypes.createPolicy("forceInner", { createHTML: (to_escape) => to_escape, }); let imageObserver = new MutationObserver(function (mutations) { mutations.forEach(function (mutation) { // console.log(mutation) if (mutation.target.src !== "") { if (mutation.target.classList.contains("n3VNCb")) { let container = mutation.target.closest(".OUZ5W"); let btn = document.createElement("a"); btn.className += buttonWrapperClass; btn.className += " h04bR"; btn.target = "_blank"; btn.href = mutation.target.src; btn.rel = "noreferrer"; btn.title = "View Image"; btn.innerHTML = escapeHTMLPolicy.createHTML( '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" class="XeEBj PZsCm J4k9Eb Wath9b vPAYyf"><script xmlns=""/><path d="M0 0h24v24H0z" fill="none"/><path d="M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z"/></svg>' ); let div = document.createElement("div"); div.className += " Jx5U7c SIwKhe"; div.appendChild(btn); let menu = container.querySelector(".fDqwl"); let existBtn = menu.querySelector("." + buttonWrapperClass); if (existBtn) { existBtn.parentNode.removeChild(existBtn); } menu.insertBefore(div, menu.childNodes[0]); } } }); }).observe(document.body, { attributes: true, subtree: true, attributeFilter: ["src"], }); })();