示例三:链接地址洗白白(简化)
地址简化,主要就是这样几种情况:
- 地址中的 get 参数可以清理,比如淘宝的搜索结果,只保留查询的关键词即可
- 地址中的路径可以被出新组合,比如本论坛的帖子地址
对于第 2 种,可以利用正则替换来修改网址,简单理解就是查找替换。对于第 1 种,因为查询的参数前后顺序是不固定的,用正则难以处理这种顺序不固定的情况,所以先提取出查询参数,然后重组成自己需要的格式。
针对已知的网站设定规则,然后根据当前网站使用对应的规则进行处理。为了适配更多的网站,所以设置了一些常用的查询参数,对于为准确是配的网站,尝试只保留这些查询参数。
// ==UserScript==
// @name 链接地址洗白白(精简示例版)
// @namespace Daomouse Link Cleaner
// @version 0.0.1
// @author 稻米鼠
// @description 把链接地址缩减至最短可用状态
// @match *://*/*
// @grant GM_setClipboard
// @grant GM_registerMenuCommand
// @noframes
// ==/UserScript==
const cleanIt = ()=>{
const url=window.location.href
const hash = url.replace(/^[^#]*(#.*)?$/, '$1')
const base = url.replace(/(\?|#).*$/, '')
let pureUrl = url
const getQueryString = function(key) {
let ret = url.match(new RegExp('(?:\\?|&)(' + key + '=[^?#&]*)', 'i'))
return ret === null ? '' : ret[1]
}
const pureUrl = base + '?q=' + getQueryString('q')
GM_setClipboard(pureUrl)
}
GM_registerMenuCommand('链接净化', cleanIt)
大概就是这个样子,上面代码实现了一下对淘宝搜索结果链接的净化。其中正则表达式应用的很多,但是前面我们没有讲。
总之就是注册一个菜单,当我们点击这个菜单的时候,运行上面已经写好的函数。函数里面对当前网址一通操作,然后把修改完的地址放入剪切板。
只要你会使用正则,并且对网址的结构有基础的了解,做这样一个脚本并不困难。真正麻烦的是对规则的收集和维护。
不过这种方法并不能够解决所有网址净化的问题,不过那不在我们这次的讨论范围之内了。