// ==UserScript== // @name Wanta // @namespace http://tampermonkey.net/ // @version 0.1 // @description 移除跳转外链提示 // @author PRO // @match *://www.jianshu.com/p/* // @match *://juejin.cn/post/* // @match *://gitee.com/* // @icon https://www.google.com/s2/favicons?sz=64&domain=jianshu.com // @grant none // @license unlicense // @downloadURL none // ==/UserScript== (function() { 'use strict'; let debug = false; // domain: [link_prefix query_parameter main_article_path dynamic_query urldecode] let fuck = { 'www.jianshu.com': ['https://link.jianshu.com', 't', '#__next > div > div > div', '', true], 'juejin.cn': ['https://link.juejin.cn', 'target', '#juejin > div.view-container > main > div > div.main-area.article-area > article', ' > .article-content', true], 'gitee.com': ['https://gitee.com/link', 'target', '#git-readme > div > div.file_content.markdown-body', '', true] }; let domain = document.domain; let suffix = fuck[domain][0]; let query_name = fuck[domain][1]; let main_path = fuck[domain][2]; let dynamic = fuck[domain][3]; let urldecode = fuck[domain][4]; let name = 'Wanta'; function getQueryValue(url, query_string) { let index = url.indexOf('?'); if (index == -1) return null; let search = url.slice(index + 1); let queries = search.split('&'); for (let i = 0; i < queries.length; i++) { let query = queries[i].split('='); if (query[0] === query_string) return query[1]; } return null; } // function removeSuffix(string, suffix) { // if (string.startsWith(suffix)) return string.slice(suffix.length); // else return string; // } function purify(link) { let new_href = getQueryValue(link.href, query_name); if (urldecode) new_href = decodeURIComponent(new_href); if (new_href) { link.href = new_href; if (debug) console.log(`[${name} DEBUG] ${link.href} -> ${new_href}`); return true; } else { console.log(`[${name}] Failed to purify below link element:`); console.log(link); return false; } } function main() { let links = document.querySelector(main_path + dynamic).getElementsByTagName('a'); 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(); observer.disconnect(); } } const observer = new MutationObserver(callback); observer.observe(node, config); } else main(); })();