软件名称
Web Watermark Tool(环境水印)
应用平台
Chrome / Edge / Brave 等 Chromium 内核浏览器(Manifest V3)
推荐类型
【开发者自荐】
是否收费
免费。没有付费档,没有试用期,没有功能限制。
是否需要注册
不需要。不需要登录,不需要账号。
是否联网
不联网。扩展不发任何网络请求,没有统计和上报。配置存在 chrome.storage.sync 里,跟着你的 Google 账号同步。
一句简介
给不同环境的网页自动打上水印和边框,按域名、URL、IP 网段或 Cookie 匹配,防止把测试操作做到生产环境上。
应用简介
利益相关:我是作者。
做这个的起因是同事真的下错了单。
我们的测试、预发、生产三套环境域名相同,页面完全一致,没有任何视觉差别。同事在跑下单流程的回归测试,点到最后一步提交,成功,然后才发现订单号格式不对。单子落在了生产环境。
处理本身很快,测试数据、金额很小、下游没触发,删掉就完了。但那之前的十分钟不太好受:不知道这单会走到哪一步,不知道要不要通知别人,也不知道前面几轮测试里有没有已经出过同样的事。
之后我把手上所有环境和地址整理了一遍,发现能认错的情况不止一种:
- 同域名不同子域,
app.example.com和app-test.example.com只差一个-test,标签页标题截断后完全一样 - 裸 IP 加 VPN,内网后台没有域名,地址栏是
10.20.30.41,同网段十几台机器分别干什么全靠记 - 同一个域名靠网关按 Cookie 分流(灰度环境),域名和路径都不变,地址栏完全给不出信息
- 同站点下
/admin是有写权限的后台 - 开着七八个标签来回切,是上面所有情况的放大器
已完成的功能:
多种匹配方式,一个配置里任意一条命中就生效
- 精确域名,
cust.example.com,只匹配这一个 - 域名后缀,
example.com,所有子域都算 - URL 正则,
^https?://.*/admin(/.*)?$,按路径或参数匹配 - IP 精确 / CIDR,
192.0.2.5/192.0.2.0/24,覆盖 VPN 访问内网 - Cookie,
env=prod判等、env~=stage判包含、只写sid判存在
任何背景上都看得见。用 mix-blend-mode: difference 让水印和页面像素做差值,浅色背景上显深、深色背景上显浅、渐变背景上跟着变。固定颜色的水印总会在某些页面上消失,这个不会。代价是开启后颜色由页面决定,你只能选浅色调或深色调,所以做成了可关闭的。
沉浸式边框。除了平铺水印,还在窗口四周画一圈 4px 边框。水印是仔细看能看到,边框是扫一眼就知道。
不挡操作。水印层不接收鼠标事件,点击、选中、拖拽都正常穿过去。
交互时自动淡出(可选,默认关)。移动鼠标或打字的时候水印淡到几乎透明,停手 2 秒后恢复。这个是给调页面样式的时候用的。
iframe 单独匹配。每个 iframe 用自己的地址判断,页面里嵌了测试环境的 iframe,那块区域会单独带水印。
规则测试器。粘一个 URL 加 Cookie 字符串进去,直接看会不会命中、命中的是哪条规则。不用真去访问那个环境。
配置导入导出。JSON 格式,方便团队之间共享一套配置,或者换电脑的时候搬过去。
实时预览。在浅色、深色、渐变三种背景上同时预览水印效果。
工具栏角标。命中的配置的短标签会显示在扩展图标角上,比如 PROD。
全局开关。配置页右上角一键全关。
多语言界面。英文、简体中文、繁体中文、日文、西班牙文,可以跟随浏览器语言。
目前还没做的:
多条规则同时命中时的优先级是写死在代码里的,用户改不了,而且冲突时界面上不给提示。我自己这套配置目前没遇到过冲突,所以暂时没做。真遇到了会加"命中列表可见"和"手动调优先级"这两个功能。
权限说明
manifest.json 里只声明了一个权限:storage。
content script 的匹配范围是 <all_urls>,所以它会在每个页面上跑一遍规则判断,但只有命中的页面才真的画水印,没命中就什么都不做。没有 activeTab,没有额外的 host 权限,不读取页面内容,不发网络请求。
下载地址
Chrome 应用商店:https://chromewebstore.google.com/detail/fgnehancpgnnbnbmpeimgjoaffjbapbi
源码
https://github.com/jinnersun/water-mark(MIT)
说明文档和五个完整规则示例




