能原地解析的链接绝不在后台访问,去除重定向的过程快速且高效,平均时间在0.02ms~0.05ms之间。几乎没有任何在后台访问网页获取去重链接的操作,一切都在原地进行,对速度精益求精。去除网页内链接的重定向,具有高准确性和高稳定性,以及相比同类插件更低的时间占用。并且保证去除重定向的有效性,采用三级方案,原地解析->自动跳转->后台访问,保证了一定能去除重定向链接
去除各搜索引擎/常用网站的重定向
注意事项:
建议使用violentmonkey,其他插件也适配,除了tampermonkey beta外,该脚本在tampermonkey beta会有时不时失效的问题
重定向一般有两种目的
- 追踪用户打开了哪些 URL(bing的/ck/重定向就属于这一种)
- 在用户跳转到站外之前进行确认地址,防止打开不明的页面(知乎的“您正在跳转到其他页面”就属于这一种)
- 在使用脚本东方永页机时,如果遇到没有去除重定向的问题,请尝试右击屏幕右侧的侧边栏开启“动态加载”
- 如果遇到自动跳转慢的问题,试试打开"Violentmonkey"设置里的"同步page模式"
反馈问题或支持新站点请带上网页地址,谢谢
对于有编程经验的用户,可以自定义自己的provider并使用
插件中有两个类,AutoJumpApp负责处理自动跳转的情况,RedirectApp负责处理原地替换重定向链接的情况,这两个类里面都有providers这个数组,用户可以在这个数组里面添加对应的provider
两者的区别是(以下是一个示例)
- AutoJumpApp:有重定向链接的网站 -> 用户点开了一个重定向链接 -> 进入了跳转页面 -> AutoJumpApp检测到跳转页面的链接帮你自动跳转 -> 用户进入原网页
- RedirectApp:有重定向链接的网站 -> RedirectApp检测到所有的这些链接,然后直接在当前网页里把这些链接替换成了原来的链接 -> 用户点开了某个链接 -> 用户进入原网页
可以看到,RedirectApp的方案是“遇到重定向链接就提前替换掉”,AutoJumpApp的方案是“进入跳转网页后才自动跳转”,因此能用RedirectApp的情况建议优先用RedirectApp
当RedirectApp比较难处理(比如CSDN博客上的外链,但是一般RedirectApp不能处理的情况很少)或是用户不太理解RedirectApp作用方式的时候可以自定义AutoJumpApp的provider,这个provider的定义简单且直接,其结构为
{
name: string,
urlTest: RegExp,
resolveAutoJump : Function
}
其中name为用户自己取的名字,urlTest为跳转链接的url,如https://link.csdn.net/?target=https%3A%2F%2F3.jetbra.in%2F,需要用户将target=后面对应的最终链接的部分写成 (.*)
,比如 urlTest: /link\.csdn\.net\/\?target=(.*)/
举个例子
{
name: "CSDN",
urlTest: /link\.csdn\.net\/\?target=(.*)/,
resolveAutoJump: function () {
location.href = decodeURIComponent(
this.urlTest.exec(location.href)[1]
);
},
},
其中CSDN是我给这个provider起的名字,这个名字是任意的,urlTest: /link\.csdn\.net\/\?target=(.*)/,
表示这个形式的网页是跳转网页,比如https://link.csdn.net/?target=https%3A%2F%2F3.jetbra.in%2F,当然你也可以写成 /https:\/\/link\.csdn\.net\/\?target=(.*)
,只要不要忘记转义就可以了,如果你不知道转义的意思,也可以简单的理解为 在. * + ? / ( ) [ ] { }这些字符前面加上\,变成\. \* \+ \? \/ \( \) \[ \] \{ \}的形式
resolveAutoJump: function () {
location.href = decodeURIComponent(
this.urlTest.exec(location.href)[1]
);
},
resolveAutoJump表示处理跳转链接的方式,上面例子的处理方式就是从urlTest里面取出对应的最终网页的链接并且赋值给location.href
RedirectApp处理的是原地替换链接的情况,当用户可以获取到重定向链接时可以自定义RedirectApp的provider,其基础结构为
{
name: string,
urlTest: RegExp | Boolean | Function
linkTest: RegExp | Boolean | Function,
resolveRedirect: Function
}
其中name为用户自己取的名字,urlTest为一个返回布尔值的属性,表示“是否要在当前域名上启用”,linkTest为一个返回布尔值的属性,表示“什么样的链接要在当前网页上被替换”,resolveRedirect内部会调用RedirectApp.removeLinkRedirect(this, element, realUrl, options),其中this和element是固定值不需要改,realUrl表示“要被替换的链接最终的形式是什么”,options是一个可选的值,一般不需要传
举个例子
{
name: "知乎专栏",
urlTest: /zhuanlan\.zhihu\.com/,
linkTest: /link\.zhihu\.com\/\?target=(.*)/,
resolveRedirect: function (element) {
RedirectApp.removeLinkRedirect(
this,
element,
new URL(element.href).searchParams.get("target"),
);
},
},
这里“知乎专栏”是我给provider起的名字,这个名字是任意的,urlTest: /zhuanlan\.zhihu\.com/,
表示我要在zhuanlan.zhihu.com上启用这个provider,linkTest: /link\.zhihu\.com\/\?target=(.*)/
表示符合 /link\.zhihu\.com\/\?target=(.*)/
这个正则形式的链接要被替换掉
resolveRedirect: function (element) {
RedirectApp.removeLinkRedirect(
this,
element,
new URL(element.href).searchParams.get("target"),
);
},
表示这些链接最终要被替换成 new URL(element.href).searchParams.get("target")
的形式,其中element.href是符合的链接