由于是第一次开发 Chrome 扩展,manifest.json 申(抄)请(来)了多余权限,0.6 版已经精简了权限,Chrome 商店已经在审核中
介意权限的 v2er,可以前往 Github 自行使用
快速切换网站的 Cookies
例如可以满足多个 V2EX 账号快速切换的需求
根据当前 Tab 打开的网页的域名,来识别是否需要把标签的所有网络请求切换为某个 UA,而不是整个 Chrome 全局切换
而又因为作用于整个 Tab 的所有网络请求,不论是否同域的网络请求都会切换为某个 UA
举例:
将 A.com 的 UA 切换到 Android Chrome
那么 A.com 网页里读取的 B.com/xxx.png 的图片网络请求也会将 UA 切换为 Android Chrome
有点绕口😂,但就是基于这个需求出发的
如果没有主动打开 Chrome 的开发者工具,就需要打开开发者工具再刷新页面才能看到所有的网络请求
这个功能就是简化这个操作
开源:Github
介绍一下这个Chrome扩展的代码
这个mind map Github链接,带黄色小标签的节点有文字注释
mmd文件可以用Idea的插件 浏览
自定义类 Setting 包装了Chrome原生API chrome.storage.local 的一些功能,是用来存储数据的
类的data成员是JSON对象,以域名为键,值为{cookies, ua, requests},用Chrome API Chrome.storage.local.get(null) 读取整个扩展的存储数据
类的init方法,监听了 chrome.storage.onChanged ,用于同步Chrome正常模式和Chrome隐身模式的自定义数据
自定义类 ExtensionEvent 是自定义事件
使用Chrome原生api 监听事件:
组装成四个自定义事件:
自定义类 Tabs 为Chrome的右键菜单工作
自定义类 Tabs 为整个扩展的核心类,大致的工作流程:
监听自定义事件 tab_start 用于一个Tab开始打开网页(parentFrameId为-1),提取打开的网页的域名,写入到Tabs类的成员data(JSON对象),以Chrome Tab id 为键,值为{domain, text, urls},domain是主域,text是Chrome扩展小图标的badge文本(那个下标小数字),urls是监听到的网址数组
监听自定义事件 tab_load 用于检查所有请求是否符合简单的网址监听的设置,符合就添加到Tabs.data[tab id].urls里,并且更新Chrome browser action的图标bagde文本,就是那个下标数字
监听原生API chrome.webRequest.onBeforeSendHeaders,以Tab id和domain判断是否需要更改UA
监听自定义事件 tab_update 用于更新右键菜单,由于Chrome没有显示Chrome菜单之类的事件,只能在后台主动刷新菜单内容
自定义事件 tab_close, 删除 Tabs.data[tab id]
前往 Edge扩展商店页面 安装
1
nolo 2019-01-30 20:30:59 +08:00 via Android
看起来很不错,支持,回去试一下。
|
2
jason94 2019-01-30 21:49:16 +08:00
等会试一试
|
3
gzlock OP |
4
Tink 2019-01-30 21:56:45 +08:00
能支持 host 切换么,比如一个 ip,传入不同 host
|
5
benedict00 2019-01-30 22:10:00 +08:00 via Android
等 Firefox 扩展,支持一个
|
6
IsaacYoung 2019-01-30 22:20:17 +08:00 via iPhone
支持一下
|
7
myjava 2019-01-30 23:01:18 +08:00
|
8
kersbal 2019-01-30 23:33:22 +08:00 via iPhone
赞,下下来试试
|
9
gzlock OP @Tink #4 从 Chrome 商店有这类型的扩展来看是可以实现的,如果可能或许大概会做这个功能吧
@benedict00 #5 在 FF 65 试了一下,正常模式勉强可以使用 但有以下问题: 1. 正常模式下,网页右键菜单的保存 Cookies 功能无效,没有弹出保存名称输入框的。 只能用扩展小图标里的保存按钮(那个+号)来保存 Cookies 2.在 FF 的 [隐私窗口] 下 popup 页面调用 chrome.extension.getBackgroundPage()会返回 null 用 moz 文档说的 browser.extension.getBackgroundPage()一样的问题,返回 null 3.FF 组件的调试功能会崩溃,需要重启 FF 才能恢复,但是重启 FF 后又需要再次添加临时组件(渣渣 FF 插件的开发体验差到让我怀疑人生,不考虑适配了😂 |
10
Zzdex 2019-01-30 23:51:09 +08:00 via iPhone
不错
|
11
newmind 2019-01-31 00:04:08 +08:00 via Android
还不错,不过你说的这几个功能目前都有,暂时不想换了
|
12
gzlock OP APPEND 的内容有误:自定义类 Tabs 为 Chrome 的右键菜单工作
正确内容是:自定义类 Menu 为 Chrome 的右键菜单工作 @newmind #11 我脑子里基于浏览器的新点子(定义为没人做过的功能)为零😂 |
13
wzw 2019-01-31 00:47:54 +08:00 via iPhone
Hosts 切换的话,我就立刻用啦,很好的东西
|
16
akira 2019-01-31 04:19:12 +08:00
这个就是 小号 模式 吧
|
17
gzlock OP @akira 这个扩展的 cookies 功能,是基于我自身的需求:
我用 chrome 的无痕模式作为主要的日常浏览网页用途,主要是为了避免定期清空浏览记录(地址栏的一大堆提示超级超级超级影响观感)和缓存(退出 chrome 或关闭 chrome 所有无痕窗口就会自动清空,节省硬盘空间)。重启 chrome 就像新的一样,挺好使的 每天开电脑,打开 chrome 无痕模式,常用网站就要重新登录,这样的操作太麻烦 我这样用 chrome 其实用了好几年了,每天都要重新登录网站。。。(截图其实可以看出我在使用无痕模式,地址栏右边是灰黑色的) 近期实在不能忍了,需要可以保存 cookies 功能的扩展来简化操作,干脆做到极致:允许保存为多组 cookies 来实现切换 cookies 功能。 因为 cookies 太敏感了,所以我想自己开发并且开源代码接受监督 所以如果有人跟我一样使用 chrome 的无痕窗口作为主要的浏览用途的话,希望这个扩展可以帮助提高一些日常操作效率 @Mitt 很有道理 @wzw @Tink 欢迎去 GitHub 讨论切换 host 的细节和需求 |
18
heiyutian 2019-01-31 05:47:14 +08:00 via Android 1
自动换 ua 总算找到了
|
19
yiying2020 2019-01-31 10:16:25 +08:00 1
完美解决我的问题,点赞。
|
20
gzlock OP @heiyutian 针对域名来切换 ua 的需求,是从移动浏览器 UA 可以免登录看微博内容来的,pc ua 会跳转到微博首页,而我又没有注册微博帐号
|
22
gzlock OP @wzw 现有版本算是间接支持类似 hosts 的功能吧,就是自定义规则的重定向,比 hosts 灵活性高一点,但是设置起来也复杂一点,我也有在 v2 发帖介绍了这个重定向功能,也做了一个配套的重定向语句测试工具
hosts 只是简单的将某个域名重定向到某个 IP 我这个扩展的重定向功能是可以提取原始 url 中的字符后传入到要重定向的 url,例如 a.com/abc 重定向为 b.com? path=abc 当然也可以是无脑将 baidu.com 重定向到 google.com |
23
gzlock OP @wzw https://www.v2ex.com/t/533001 重定向功能详细介绍,内有配套测试工具的网址
|
24
chermy 2021-09-06 11:52:00 +08:00 1
谢谢分享, 比 swap my cookie 好用
|
26
jianyisiqian 225 天前 1
非常牛逼,
|