GM 请求的跨域确认弹窗怎么选:connect 域名白名单的用户侧逻辑
页面角落突然弹出「脚本试图访问 xxx 域名,是否允许?」——这是 GM_xmlhttpRequest 的用户确认机制在工作。看懂它,才知道该不该点允许。
为什么会弹
官方文档对 @connect 的说明定义了这套逻辑:
- 脚本头部用
@connect声明它要请求的域名; - 声明里没覆盖的域名,请求前弹窗询问你;
- 官方给脚本作者的建议恰好反证了机制:把已知域名全声明出来,就能「为大多数用户避免确认弹窗」——反过来说,弹窗就是为「作者没声明或声明白名单之外」的请求准备的。
弹窗还有一个设计细节:起始 URL 和最终 URL 都会检查——脚本声明请求 A 域名、实际被重定向到 B 域名,B 同样要过确认。
弹窗选项的含义
- 允许一次:本次请求放行,下次再弹;
- 始终允许该域名:把域名写进该脚本的用户域白名单(脚本设置页可查可删);
- 拒绝:请求被拦,脚本会走 onerror 回调。
部分脚本作者会故意加一条 @connect *,配合官方提供的「始终允许所有域名」按钮——这个按钮请慎点:它等于对这个脚本敞开全部域名,只该给完全信任的脚本用。
怎么判断该不该允许
- 域名和脚本功能对不对得上:下载器脚本请求图床域名,合理;改排版脚本请求统计域名,可疑;
- 去脚本说明页找解释:正经作者会在文档里说明请求哪些服务、为什么;
- 拿不准就允许一次:一次性的放行不产生持久授权,观察脚本行为再决定;
- 发现恶意域名:拒绝后顺手给脚本打差评/反馈,并复核脚本安全判断的清单。
事后管理
- 已放行的域名清单在该脚本的设置页(用户域白名单区,见脚本设置页);
- 想整体收紧:删掉不需要的条目即可,下次请求会重新弹窗。
与其他确认机制的层次
脚本要能力会过三道门:安装时你确认 @grant 清单(见grant 权限),运行时跨域弹窗确认域名,下载类还有扩展名白名单(见下载函数)。弹窗烦人,但它是你对单个脚本行为的逐域名审计点——别当成障碍,当成提示。