// ==UserScript== // @name Wanta // @namespace http://tampermonkey.net/ // @version 0.5.0 // @description 移除跳转外链提示 // @author PRO // @match *://www.jianshu.com/p/* // @match *://juejin.cn/post/* // @match *://gitee.com/* // @match *://zhuanlan.zhihu.com/* // @match *://*.feishu.cn/* // @match *://leetcode.cn/problems/* // @match *://www.mcmod.cn/* // @match *://play.mcmod.cn/* // @match *://www.mcbbs.net/* // @match *://www.minecraftforum.net/* // @match *://www.curseforge.com/minecraft/mc-mods/* // @icon https://greasyfork.org/rails/active_storage/blobs/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBBMWhLQVE9PSIsImV4cCI6bnVsbCwicHVyIjoiYmxvYl9pZCJ9fQ==--2831c7f8ea43fc8b8e3eed3818b98e88bb689285/%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-07-16%20105357.png?locale=zh-CN // @grant none // @license gpl-3.0 // @downloadURL none // ==/UserScript== (function() { 'use strict'; let debug = true; // domain: [link_prefix query_parameter main_article_path decode_func] // query_parameter = '': Get the last part of url function same(orig) { return orig; } function b64Decode(orig) { return decodeURIComponent(atob(orig)); } function mcmod(orig) { let parts = orig.split("@"); return parts.map(b64Decode).join("?"); } let fuck = { 'www.jianshu.com': ['https://links.jianshu.com/go', 'to', 'article', decodeURIComponent], 'juejin.cn': ['https://link.juejin.cn', 'target', '#juejin > div.view-container > main > div > div.main-area.article-area > article', decodeURIComponent], 'gitee.com': ['https://gitee.com/link', 'target', '.markdown-body', decodeURIComponent], 'zhuanlan.zhihu.com': ['https://link.zhihu.com/', 'target', 'div.Post-RichTextContainer', decodeURIComponent], '.*\.feishu\.cn': ['https://security.feishu.cn/link/safety', 'target', 'div#mainBox', decodeURIComponent], 'leetcode.cn': ['https://leetcode.cn/link/', 'target', '#app', same], 'www.mcmod.cn': ['https://link.mcmod.cn/target/', '', 'body > div.col-lg-12.common-frame > div > div.col-lg-12.center > div.col-lg-12.right', mcmod], 'play.mcmod.cn': ['https://link.mcmod.cn/target/', '', 'body > div.col-lg-12.common-frame > div > div.col-lg-12.center', mcmod], 'www.mcbbs.net': ['https://www.mcbbs.net/plugin.php?id=link_redirect', 'target', 'div#ct', decodeURIComponent], 'www.minecraftforum.net': ['https://www.minecraftforum.net/linkout', 'remoteUrl', '.listing-container', decodeURIComponent], 'www.curseforge.com': ['https://www.curseforge.com/linkout', 'remoteUrl', '.project-page', decodeURIComponent] }; let domain = window.location.hostname; if (!(domain in fuck)) { for (let d in fuck) { if (domain.match(d)) { domain = d; break; } } } let prefix = fuck[domain][0]; let query_name = fuck[domain][1]; let main_path = fuck[domain][2]; let decode_func = fuck[domain][3]; let name = 'Wanta'; let attr_flag = "wanta-purified"; let max_depth = 5; function purify(link) { let new_href; if (query_name.length == 0) { let l = link.href.split('/'); new_href = l[l.length - 1]; } else { let params = new URL(link.href).searchParams; new_href = params.get(query_name); } try { new_href = decode_func(new_href); } catch (error) { console.error(`[${name} DEBUG] Failed to purify link "${link.href}".`) return false; } if (new_href) { if (debug) console.log(`[${name} DEBUG] ${link.href} -> ${new_href}`); link.href = new_href; return true; } else { console.error(`[${name} DEBUG] Failed to purify link "${link.href}".`) return false; } } function handler(e) { let ele = e.target; for (let depth = 0; depth < max_depth; depth++) { if (ele.hasAttribute(attr_flag)) { break; } if (ele.tagName == 'A') { console.log(`[${name}] Intercepted link: ${ele.href}`); if (!ele.href.startsWith(prefix) || purify(ele)) { e.preventDefault(); e.stopImmediatePropagation(); ele.setAttribute(attr_flag, "success"); ele.click(); break; } else { ele.setAttribute(attr_flag, "failed"); console.log(`[${name}] Failed to purify link: ${ele.href}`); } } ele = ele.parentElement; } } let main_article = document.querySelector(main_path); if (main_article) { main_article.addEventListener('click', handler, true); } else { console.error(`[${name}] Failed to find main article.`); } })();