// ==UserScript== // @name Wanta // @namespace http://tampermonkey.net/ // @version 0.3.4 // @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/* // @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 unlicense // @downloadURL none // ==/UserScript== (function() { 'use strict'; let debug = false; // domain: [link_prefix query_parameter main_article_path dynamic_query decode_func always_listen] // 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, false], 'juejin.cn': ['https://link.juejin.cn', 'target', '#juejin > div.view-container > main > div > div.main-area.article-area > article', ' > .article-content', decodeURIComponent, false], 'gitee.com': ['https://gitee.com/link', 'target', '.markdown-body', '', decodeURIComponent, false], 'zhuanlan.zhihu.com': ['https://link.zhihu.com/', 'target', 'div.Post-RichTextContainer', '', decodeURIComponent, false], '.*\.feishu\.cn': ['https://security.feishu.cn/link/safety', 'target', 'div#mainBox', ' div.mindnote-paper', decodeURIComponent, false], 'leetcode.cn': ['https://leetcode.cn/link/', 'target', '#app', ' div#question-detail-main-tabs', same, true], '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, false], 'play.mcmod.cn': ['https://link.mcmod.cn/target/', '', 'body > div.col-lg-12.common-frame > div > div.col-lg-12.center', '', mcmod, false], 'www.mcbbs.net': ['https://www.mcbbs.net/plugin.php', 'target', 'div#ct', '', decodeURIComponent, false] }; let domain = document.domain; if (!(domain in fuck)) { for (let d in fuck) { if (domain.match(d)) { domain = d; break; } } } let suffix = fuck[domain][0]; let query_name = fuck[domain][1]; let main_path = fuck[domain][2]; let dynamic = fuck[domain][3]; let decode_func = fuck[domain][4]; let always_listen = fuck[domain][5]; let name = 'Wanta'; 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); } new_href = decode_func(new_href); if (new_href) { if (debug) console.log(`[${name} DEBUG] ${link.href} -> ${new_href}`); link.href = new_href; return true; } else { console.log(`[${name}] Failed to purify below link element:`); console.log(link); return false; } } function main() { let target_node = document.querySelector(main_path + dynamic); let links; if (target_node) { links = target_node.getElementsByTagName('a'); } else { return; } if (debug) console.log(links); let purified = 0; for (let i = 0;i < links.length; i++) { if (links[i].href.startsWith(suffix)) { if (purify(links[i])) purified++; } else if (debug) console.log(`[${name} DEBUG] Skipped "${links[i].href}".`); } console.log(`[${name}] Purified ${purified} links out of ${links.length} links.`); } if (dynamic) { const node = document.querySelector(main_path); const config = { attributes: false, childList: true, subtree: true }; const callback = function(mutations, observer) { let article = node.querySelector(dynamic.slice(3)); if (article) { main(); if (!always_listen) observer.disconnect(); } } const observer = new MutationObserver(callback); observer.observe(node, config); } else main(); })();