Removes redirects of some sites, such as google, zhihu...
当前为
// ==UserScript==
// @name rBlock
// @description Removes redirects of some sites, such as google, zhihu...
// @namespace https://greasyfork.org/zh-CN/scripts/20524-redirect-blocker
// @author nonoroazoro
// @include /^https?\:\/\/(www|encrypted|news)\.google\./
// @version 1.0
// @grant none
// ==/UserScript==
if (typeof unsafeWindow == "undefined")
{
unsafeWindow = window;
}
// block redirects of google
function _blockGoogle()
{
// 1. all/videos/news/apps
let elems = document.querySelectorAll(`a[onmousedown^="return rwt("]`);
for (let e of elems)
{
e.removeAttribute("onmousedown");
}
// 2. images
elems = document.querySelectorAll(`#irc_cc a[class^="irc_"], #irc_cc a[class*=" irc_"]`);
for (let e of elems)
{
_removeListeners(e, "mousedown");
}
// 3. news
elems = document.querySelectorAll(`a.article`);
for (let e of elems)
{
_removeListeners(e, "click mousedown");
}
// 4. general
elems = document.querySelectorAll(`a[href^="/url?"]`);
const regex = /(?:\/url\?.*url\=)(http.*?)$/i;
for (let e of elems)
{
// reveal url
const m = e.href.match(regex);
if (m && m[1])
{
e.href = decodeURIComponent(m[1]);
}
// open in new tab
if (!e.target)
{
e.target = "_blank";
}
}
// 5. expose cached links
let menuLink;
let cacheLink;
elems = document.querySelectorAll(`a[href^="http://webcache.googleusercontent."], a[href^="https://webcache.googleusercontent."]`);
for (let e of elems)
{
e.style.display = "inline";
menuLink = e.closest("div.action-menu.ab_ctl");
cacheLink = document.createElement("a");
cacheLink.href = e.href.replace(/^http\:/, "https:");
cacheLink.target = "_blank";
cacheLink.innerText = " Cached ";
menuLink.parentNode.insertBefore(cacheLink, menuLink);
}
}
function _removeListeners(p_element, p_events)
{
if (p_element instanceof EventTarget && typeof p_events === "string")
{
const eventList = p_events.split(/\W+/) || [];
for (let event of eventList)
{
p_element.removeEventListener(event, _preventDefaultAction, true);
p_element.addEventListener(event, _preventDefaultAction, true);
}
}
}
function _preventDefaultAction(e)
{
e.stopPropagation();
}
// start blocker
unsafeWindow.addEventListener("load", () =>
{
_blockGoogle();
const observer = new unsafeWindow.MutationObserver((p_mutations) =>
{
_blockGoogle();
});
observer.observe(document.body,
{
childList: true,
subtree: true
}
);
});