// ==UserScript== // @name 跳转链接修复(移除重定向外链直达) // @description 修复跳转链接为站外直链(移除重定向),免去拦截页面点击步骤可直达站外;拦截页面自动跳转;已适配爱发电、百度、CSDN、豆瓣、码云、花瓣网、简书、掘金、力扣(Leetcode)、51CTO 博客、牛客网、开源中国、pixiv、微信、微信开放社区、QQ 邮箱、PC 版 QQ、腾讯文档、360 搜索、少数派、腾讯云开发者社区、微博、YouTube、语雀、知乎、知乎专栏 // @namespace maomao1996.remove-redirect // @version 2.0.1 // @author maomao1996 // @homepage https://github.com/maomao1996/tampermonkey-scripts // @supportURL https://github.com/maomao1996/tampermonkey-scripts/issues // @license MIT // @match *://*/* // @grant none // @downloadURL none // ==/UserScript== (function() { "use strict"; var r = Array.isArray; var isFunction = function(r) { return typeof r === "function"; }; var isString = function(r) { return typeof r === "string"; }; var t = location.hostname.replace(/^www\./, ""); function validateUrl(r) { if (!isString("string")) return false; try { new URL(r); return true; } catch (r) { return false; } } var e = [ [ "51CTO \u535a\u5ba2", "blog.51cto.com", { autojump: { validator: function(r) { var t = r.pathname; return t === "/transfer"; }, separator: "?" } } ] ]; var a = [ [ "\u7231\u53d1\u7535", "afdian.net", { transform: { selector: '[href*="afdian.net/link?target="]' }, autojump: { validator: function(r) { var t = r.pathname; return t === "/link"; } } } ] ]; var o = [ [ "\u767e\u5ea6", "baidu.com", { transform: { selector: "#content_left > [mu]", customTransform: function customTransform(r) { var t = r.getAttribute("mu"); if (validateUrl(t) && !t.includes(".baidu.com")) r.querySelectorAll("a[href]").forEach((function(r) { return r.setAttribute("href", t); })); } } } ] ]; var n = [ [ "CSDN", "link.csdn.net", { autojump: {} } ] ]; var u = [ [ "\u8c46\u74e3", "douban.com", { autojump: { validator: function(r) { var t = r.pathname; return t === "/link2/"; }, queryName: "url" } } ] ]; var i = [ [ "\u7801\u4e91", "gitee.com", { transform: { selector: '[href*="/link?target="]' }, autojump: { validator: function(r) { var t = r.pathname; return t === "/link"; } } } ] ]; var l = [ [ "\u82b1\u74e3\u7f51", "huaban.com", { autojump: { validator: function(r) { var t = r.pathname; return t === "/go"; }, selector: ".wrapper button.ant-btn" } } ] ]; var c = [ [ "\u7b80\u4e66", "jianshu.com", { transform: { selector: '[href*="links.jianshu.com/go?to="]', separator: "go?to=" }, autojump: { validator: function(r) { var t = r.pathname; return t === "/go-wild"; }, queryName: "url" } } ] ]; var m = [ [ "\u6398\u91d1", "juejin.cn", { transform: { selector: '[href*="link.juejin.cn?target="]' } } ], [ , "link.juejin.cn", { autojump: {} } ] ]; var f = [ [ "\u529b\u6263\uff08Leetcode\uff09", "leetcode.cn", { transform: { selector: '[href*="/link/?target="]' } } ] ]; var s = [ [ "\u725b\u5ba2\u7f51", "nowcoder.com", { transform: { selector: [ '[href*="gw-c.nowcoder.com/api/sparta/jump/link?link="]', '[href*="hd.nowcoder.com/link.html?target="]' ].join(","), separator: /\?target|link\=/ } } ], [ , "hd.nowcoder.com", { autojump: {} } ] ]; var v = [ [ "\u5f00\u6e90\u4e2d\u56fd", /^(?:my\.)?oschina\.net$/, { transform: { selector: '[href*="oschina.net/action/GoToLink?url="]', separator: "GoToLink?url=" }, autojump: { validator: function(r) { var t = r.pathname; return t === "/action/GoToLink"; }, queryName: "url" } } ] ]; var p = [ [ "pixiv", "pixiv.net", { transform: { selector: '[href*="/jump.php?"]', separator: "?" }, autojump: { validator: function(r) { var t = r.pathname; return t === "/jump.php"; }, selector: "a[href]", separator: "?" } } ] ]; var d = [ [ "\u5fae\u4fe1", "weixin110.qq.com", { autojump: { validator: function(r) { var t = r.pathname; return t === "/cgi-bin/mmspamsupport-bin/newredirectconfirmcgi"; }, getOriginalUrl: function() { return document.querySelector(".weui-msg p.weui-msg__desc").textContent; }, selector: "a.weui-btn.weui-btn_default" } } ], [ "\u5fae\u4fe1\u5f00\u653e\u793e\u533a", "developers.weixin.qq.com", { autojump: { validator: function(r) { var t = r.pathname; return t === "/community/middlepage/href"; }, queryName: "href" } } ], [ "QQ \u90ae\u7bb1", "mail.qq.com", { autojump: { validator: function(r) { var t = r.pathname; return t === "/cgi-bin/readtemplate"; }, selector: "div.c-footer a.c-footer-a1", queryName: "gourl" } } ], [ "PC \u7248 QQ", "c.pc.qq.com", { autojump: { validator: function(r) { var t = r.pathname; return t === "/middlem.html"; }, queryName: "pfurl" } } ], [ "\u817e\u8baf\u6587\u6863", "docs.qq.com", { autojump: { validator: function(r) { var t = r.pathname; return t === "/scenario/link.html"; }, queryName: "url" } } ] ]; var h = [ [ "360 \u641c\u7d22", "so.com", { transform: { selector: 'a[href*="so.com/link?"][data-mdurl]', customTransform: function customTransform(r) { var t = r.getAttribute("data-mdurl"); if (validateUrl(t)) r.setAttribute("href", t); } } } ] ]; var y = [ [ "\u5c11\u6570\u6d3e", "sspai.com", { transform: { selector: '[href*="sspai.com/link?target="]' }, autojump: { validator: function(r) { var t = r.pathname; return t === "/link"; } } } ] ]; var _ = [ [ "\u817e\u8baf\u4e91\u5f00\u53d1\u8005\u793e\u533a", "cloud.tencent.com", { transform: { selector: '[href*="/developer/tools/blog-entry?target="]' }, autojump: { validator: function(r) { var t = r.pathname; return t === "/developer/tools/blog-entry"; } } } ] ]; var b = [ [ "\u5fae\u535a", "weibo.com", { transform: { selector: '[href*="weibo.cn/sinaurl?u="]', queryName: "u" } } ], [ , "weibo.cn", { autojump: { validator: function(r) { var t = r.pathname; return t === "/sinaurl"; }, queryName: "u" } } ] ]; var g = [ [ "YouTube", "youtube.com", { transform: { selector: '[href*="youtube.com/redirect?event="]', queryName: "q" } } ] ]; var j = [ [ "\u8bed\u96c0", "yuque.com", { autojump: { validator: function(r) { var t = r.pathname; return t === "/r/goto"; }, queryName: "url" } } ] ]; var q = [ [ "\u77e5\u4e4e\u3001\u77e5\u4e4e\u4e13\u680f", /^(?:zhuanlan\.)?zhihu\.com$/, { transform: { selector: '[href*="link.zhihu.com/?target="]' } } ], [ , "link.zhihu.com", { autojump: {} } ] ]; var w = Object.freeze({ __proto__: null, afdianNet: a, baiduCom: o, csdnNet: n, doubanCom: u, giteeCom: i, huabanCom: l, jianshuCom: c, juejinCn: m, leetcodeCn: f, m_51CtoCom: e, nowcoderCom: s, oschinaNet: v, pixivNet: p, qqCom: d, soCom: h, sspaiCom: y, tencentCom: _, weiboCom: b, youtubeCom: g, yuqueCom: j, zhihuCom: q }); function _array_like_to_array(r, t) { if (t == null || t > r.length) t = r.length; for (var e = 0, a = new Array(t); e < t; e++) a[e] = r[e]; return a; } function _array_with_holes(r) { if (Array.isArray(r)) return r; } function _iterable_to_array_limit(r, t) { var e = r == null ? null : typeof Symbol !== "undefined" && r[Symbol.iterator] || r["@@iterator"]; if (e == null) return; var a = []; var o = true; var n = false; var u, i; try { for (e = e.call(r); !(o = (u = e.next()).done); o = true) { a.push(u.value); if (t && a.length === t) break; } } catch (r) { n = true; i = r; } finally { try { if (!o && e["return"] != null) e["return"](); } finally { if (n) throw i; } } return a; } function _non_iterable_rest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _sliced_to_array(r, t) { return _array_with_holes(r) || _iterable_to_array_limit(r, t) || _unsupported_iterable_to_array(r, t) || _non_iterable_rest(); } function _unsupported_iterable_to_array(r, t) { if (!r) return; if (typeof r === "string") return _array_like_to_array(r, t); var e = Object.prototype.toString.call(r).slice(8, -1); if (e === "Object" && r.constructor) e = r.constructor.name; if (e === "Map" || e === "Set") return Array.from(e); if (e === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)) return _array_like_to_array(r, t); } var k = Object.values(w).flat(); var C = k.find((function(r) { var e = _sliced_to_array(r, 2), a = e[1]; if (isString(a)) return a === t; return a.test(t); })); if (r(C)) { var N = C[2], A = N.transform, U = N.autojump; if (A) { var S = A.selector, T = A.queryName, L = A.separator, O = L === void 0 ? "?target=" : L, x = A.customTransform, z = x === void 0 ? function(r) { var t = T ? new URL(r.href).searchParams.get(T) : r.href.split(O)[1]; if (t) r.href = decodeURIComponent(t); } : x; var I = new MutationObserver((function() { document.querySelectorAll(S).forEach(z); })); I.observe(document.body, { childList: true, subtree: true }); } if (U) (function() { var r; var t = U.validator, e = U.getOriginalUrl, a = U.selector, o = U.separator, n = U.queryName, u = n === void 0 ? "target" : n; if (t && !t(location)) return; if (isFunction(e)) { var i = e(); if (i && validateUrl(i)) return location.replace(i); } if (a && document.querySelector(a)) return document.querySelector(a).click(); var l = location.search; var c = decodeURIComponent(o ? (r = l.split(o)) === null || r === void 0 ? void 0 : r[1] : new URLSearchParams(l).get(u) || ""); validateUrl(c) && location.replace(c); })(); } })();