Direct links to images and pages on Google Images
目前為
// ==UserScript==
// @name Google DWIMages
// @description Direct links to images and pages on Google Images
// @author chocolateboy
// @copyright chocolateboy
// @namespace https://github.com/chocolateboy/userscripts
// @version 1.0.0
// @license GPL: http://www.gnu.org/copyleft/gpl.html
// @include http://www.google.tld/*tbm=isch*
// @include https://encrypted.google.tld/*tbm=isch*
// @include https://www.google.tld/*tbm=isch*
// @require https://code.jquery.com/jquery-3.3.1.min.js
// @require https://cdn.rawgit.com/eclecto/jQuery-onMutate/79bbb2b8caccabfc9b9ade046fe63f15f593fef6/src/jquery.onmutate.min.js
// @grant GM_log
// ==/UserScript==
// XXX note: the unused grant is a workaround for a Greasemonkey bug:
// https://github.com/greasemonkey/greasemonkey/issues/1614
function onImageLinks ($imageLinks) {
$imageLinks.each(function () {
const $imageLink = $(this)
const $container = $imageLink.closest('.rg_di')
const meta = JSON.parse($container.find('.rg_meta').text())
// remove the hook from the image-link to prevent it being hijacked
$imageLink.removeAttr('jsaction')
// set the image-link's href to the image URL rather than Google's
// interceptor
$imageLink.attr('href', meta.ou)
// there are two layouts for image-search results:
//
// 1) new (?) (private browsing mode seems to trigger it): has a
// dimensions tooltip (e.g. "800 x 600") in the bottom left-hand corner
// of the image and a footer (link) below the image with the page name
// and the domain in separate DIV elements
//
// 2) legacy (?): no footer below the image, but the tooltip includes
// the domain name (e.g. "800 x 600 - example.com")
//
// in the first case, we only need to fix the existing link (footer)
// i.e. we don't need to linkify the tooltip. in the second case, we
// wrap the tooltip in a link and assign it the page URL
const $footerLink = $container.find('a.irc-nic')
if ($footerLink.length) {
// 1) set the footer link's href to the page URL
$footerLink.removeAttr('jsaction').attr('href', meta.ru)
} else {
// 2) wrap the tooltip in a link whose href points to the page URL
$imageLink.find('.rg_ilmbg').wrap(
$('<a></a>').attr('href', meta.ru)
)
}
})
}
$.onCreate('a.rg_l', onImageLinks, true /* multi */)