Manifest V3下如何检测扩展程序安装于普通浏览器还是自动化工具
问题描述
我需要检测扩展程序是正常浏览器安装,还是通过自动化工具/本地开发环境安装的。在Manifest V2中,能在后台页面访问window对象,用navigator.webdriver属性实现检测,但Manifest V3受Service Worker限制,这种方法行不通了,有没有替代方案?
替代解决方案
可以借助浏览器的chrome.management(Firefox对应browser.management)API获取扩展的安装类型,以此区分不同安装场景:
1. 声明权限
首先要在manifest.json里添加"management"权限:
{ "permissions": ["management"] }
2. 编写检测逻辑
在Service Worker中调用getSelf()获取当前扩展信息,通过installType字段判断:
const selfInfo = await chrome.management.getSelf(); if (selfInfo.installType === "normal") { console.log("扩展通过官方应用商店正常安装"); } else if (selfInfo.installType === "development") { console.log("扩展为本地开发加载(比如开发者模式下加载已解压的文件夹)"); } else if (selfInfo.installType === "sideload") { console.log("扩展为侧载安装(常见于自动化工具部署场景)"); }
注意点
你提供的代码里installType的对应关系搞反了:normal是商店安装的扩展,development才是本地开发加载的情况。另外Chrome还支持sideload类型,对应自动化工具或手动CRX安装的场景,可以按需补充判断。
内容的提问来源于stack exchange,提问作者SelectorsHub ChroPath Creator
相关产品推荐
相关产品推荐

