如何检测Chrome浏览器已安装扩展?求可用实现方案(规避Luminous拦截)
检测Chrome浏览器扩展是否已安装的可行方案
很多开发者在查找Chrome扩展检测方案时,会发现网上大部分教程里的方法早就被Chrome官方废弃,完全无法正常工作。下面我会给出目前仍可行的实现示例,同时说明需要注意的局限性:
一、最可靠的方案:通过扩展ID访问公开资源
每个Chrome扩展都有一个唯一的固定ID(正式发布的扩展ID不会变更,未发布的开发者版本ID可能随打包方式变化),如果扩展已安装,它的公开可访问资源可以通过特定URL访问。我们可以利用这一点来检测扩展是否存在。
实现示例
// 替换为目标扩展的唯一ID const targetExtensionId = "abcdefghijklmnopqrstuvwxyzabcdef"; // 替换为扩展中确定存在的公开资源路径(比如图标、静态文件) const accessibleResourceUrl = `chrome-extension://${targetExtensionId}/icons/icon16.png`; async function checkExtensionInstalled() { try { // 用HEAD请求检查资源是否存在,避免下载整个文件 const response = await fetch(accessibleResourceUrl, { method: 'HEAD' }); if (response.ok) { console.log("目标扩展已安装"); return true; } else { console.log("扩展未安装或资源不可访问"); return false; } } catch (error) { // 访问失败通常意味着扩展未安装(因为Chrome会拦截不存在的扩展URL请求) console.log("目标扩展未安装"); return false; } } // 调用检测函数 checkExtensionInstalled();
注意事项
- 必须明确目标扩展的唯一ID,你可以在Chrome扩展管理页面(
chrome://extensions/)开启"开发者模式"后查看已安装扩展的ID - 要确保访问的资源在扩展的
manifest.json中被列为web_accessible_resources,否则网页无法访问该资源,导致检测失效
二、需要避开的坑:事件检测法的局限性
之前有不少方案依赖事件通信(比如网页发送消息给扩展、扩展主动触发网页事件)来检测,但这类方法现在不仅被Chrome的安全政策限制,还容易被专门的扩展拦截——比如你提到的Luminous: JavaScript events blocker,它可以拦截所有JavaScript生成的事件,直接绕过这类检测逻辑,完全无法保证准确性,因此不推荐使用。
内容的提问来源于stack exchange,提问作者Joseph Miller




