Google Direct Links for Pages and Images

direct links to web pages and images from Google result.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @namespace          https://greasyfork.org/en/users/794317-colar
// @name               Google Direct Links for Pages and Images
// @name:fr            Google Liens Directs vers Pages et Images
// @name:zh-CN         Google 直链搜索结果网页及图片
// @name:zh-TW         Google 直鏈搜尋結果網頁及圖片
// @description        direct links to web pages and images from Google result.
// @description:fr     liens directs vers les pages web et les images des résultats Google.
// @description:zh-CN  令 Google 直接链接至搜索结果网页以及图片,跳过重定向及图片预览。
// @description:zh-TW  令 Google 直接鏈接至搜尋結果網頁以及圖片,跳過重定向及圖片預覽。
// @homepageURL        https://greasyfork.org/scripts/429493
// @license            GNU GPL-3
// @author             Colar & VA
// @version            1.1.20210716
// @grant              GM.getValue
// @grant              GM.setValue
// @grant              GM_getValue
// @grant              GM_setValue
// @grant              unsafeWindow
// @include            /^https?://(?:www|encrypted|ipv[46])\.google\.[^/]+/(?:$|[#?]|search|webhp|imgres)/
// @match              https://news.google.com/*
// @match              https://cse.google.com/cse/*
// @run-at             document-start
// @icon               data:image/png;base64,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
// ==/UserScript==

document.addEventListener('DOMContentLoaded', function () {
  var style = document.createElement('style');
  style.textContent = 'a.x_source_link {' + [
    'line-height: 1.0', // increment the number for a taller thumbnail info-bar
    'text-decoration: none !important',
    'color: inherit !important',
    'display: block !important'
  ].join(';') + '}';
  document.head.appendChild(style);
}, true);

var M = (typeof GM !== 'undefined') ? GM : {
  getValue: function (name, alt) {
    var value = GM_getValue(name, alt);
    return { then: function (callback) { callback(value); } };
  },
  setValue: function (name, value) {
    GM_setValue(name, value);
    return { then: function (callback) { callback(); } };
  }
};

function getOption() {
  var opt_noopen = false;
  // For example: open https://ipv4.google.com/#x-option:open-inplace
  switch (location.hash) {
    // Open links in the current tab.
    case '#x-option:open-inplace': opt_noopen = true; break;
    // Do not ...
    case '#x-option:no-open-inplace': opt_noopen = false; break;
    default: return M.getValue('opt_noopen', opt_noopen);
  }
  M.setValue('opt_noopen', opt_noopen);
  return { then: function (callback) { callback(opt_noopen); } };
}

function unsafeEval(func, opt) {
  let body = 'return (' + func + ').apply(this, arguments)';
  unsafeWindow.Function(body).call(unsafeWindow, opt);
}

getOption().then(function run(opt_noopen) {
unsafeEval(function (opt_noopen) {

var debug = false;
var count = 0;

var options = {noopen: opt_noopen};
debug && console.log('Options:', options);

// web pages: url?url=
// images: imgres?imgurl=
// custom search engine: url?q=
// malware: interstitial?url=
var re = /\b(url|imgres)\?.*?\b(?:url|imgurl|q)=(https?\b[^&#]+)/i;
var restore = function (link, url) {
  var oldUrl = link.getAttribute('href') || '';
  var newUrl = url || oldUrl;
  var matches = newUrl.match(re);
  if (matches) {
    debug && console.log('restoring', link._x_id, newUrl);
    link.setAttribute('href', decodeURIComponent(matches[2]));
    enhanceLink(link);
    if (matches[1] === 'imgres') {
      if (link.querySelector('img[src^="data:"]')) {
        link._x_href = newUrl;
      }
      enhanceThumbnail(link, newUrl);
    }
  } else if (url != null) {
    link.setAttribute('href', newUrl);
  }
};

var purifyLink = function (a) {
  if (/\brwt\(/.test(a.getAttribute('onmousedown'))) {
    a.removeAttribute('onmousedown');
  }
  if (a.parentElement &&
      /\bclick\b/.test(a.parentElement.getAttribute('jsaction') || '')) {
    a.addEventListener('click', function (e) {
      e.stopImmediatePropagation();
      e.stopPropagation();
    }, true);
  }
};

var enhanceLink = function (a) {
  purifyLink(a);
  a.setAttribute('rel', 'noreferrer');
  a.setAttribute('referrerpolicy', 'no-referrer');
  if (options.noopen) {
    a.setAttribute('target', '_self');
    a.addEventListener('click', function (event) {
      event.stopImmediatePropagation();
      event.stopPropagation();
    }, true);
  }
};

var enhanceThumbnail = function (link, url) {
  // make thumbnail info-bar clickable
  var infos = [].slice.call(link.querySelectorAll('img~div'));
  if (infos.length > 0) {
    var pageUrl = decodeURIComponent(url.match(/[?&]imgrefurl=([^&#]+)/)[1]);
    infos.forEach(function (info) {
      var pagelink = document.createElement('a');
      enhanceLink(pagelink);
      pagelink.href = pageUrl;
      pagelink.className = 'x_source_link';
      pagelink.textContent = info.textContent;
      info.textContent = '';
      info.appendChild(pagelink);
    });
  }
};

var fakeLink = document.createElement('a');
var normalizeUrl = function (url) {
  fakeLink.href = url;
  return fakeLink.href;
};

var setter = function (v) {
  v = String(v); // in case an object is passed by clever Google
  debug && console.log('State:', document.readyState);
  debug && console.log('set', this._x_id, this.getAttribute('href'), v);
  restore(this, v);
};
var getter = function () {
  debug && console.log('get', this._x_id, this.getAttribute('href'));
  return normalizeUrl(this._x_href || this.getAttribute('href'));
};
var blocker = function (event) {
  event.stopPropagation();
  restore(this);
  debug && console.log('block', this._x_id, this.getAttribute('href'));
};

var handler = function (a) {
  if (a._x_id) {
    restore(a);
    return;
  }
  a._x_id = ++count;
  debug && a.setAttribute('x-id', a._x_id);
  if (Object.defineProperty) {
    debug && console.log('define property', a._x_id);
    Object.defineProperty(a, 'href', {get: getter, set: setter});
  } else if (a.__defineSetter__) {
    debug && console.log('define getter', a._x_id);
    a.__defineSetter__('href', setter);
    a.__defineGetter__('href', getter);
  } else {
    debug && console.log('define listener', a._x_id);
    a.onmouseenter = a.onmousemove = a.onmouseup = a.onmousedown =
      a.ondbclick = a.onclick = a.oncontextmenu = blocker;
  }
  if (/^_(?:blank|self)$/.test(a.getAttribute('target')) ||
      /\brwt\(/.test(a.getAttribute('onmousedown')) ||
      /\bmouse/.test(a.getAttribute('jsaction')) ||
      /\bclick\b/.test(a.parentElement.getAttribute('jsaction'))) {
    enhanceLink(a);
  }
  restore(a);
};

var checkNewNodes = function (mutations) {
  debug && console.log('State:', document.readyState);
  if (mutations.target) {
    checkAttribute(mutations);
  } else {
    mutations.forEach && mutations.forEach(checkAttribute);
  }
};
var checkAttribute = function (mutation) {
  var target = mutation.target;
  if (target && target.nodeName.toUpperCase() === 'A') {
    if ((mutation.attributeName || mutation.attrName) === 'href') {
      debug && console.log('restore attribute', target._x_id, target.getAttribute('href'));
    }
    handler(target);
  } else if (target instanceof Element) {
    [].slice.call(target.querySelectorAll('a')).forEach(handler);
  }
};

var MutationObserver = window.MutationObserver || window.WebKitMutationObserver;

if (MutationObserver) {
  debug && console.log('MutationObserver: true');
  new MutationObserver(checkNewNodes).observe(document.documentElement, {
    childList: true,
    attributes: true,
    attributeFilter: ['href'],
    subtree: true
  });
} else {
  debug && console.log('MutationEvent: true');
  document.addEventListener('DOMAttrModified', checkAttribute, false);
  document.addEventListener('DOMNodeInserted', checkNewNodes, false);
}

}, opt_noopen);
});