如何通过网页JS检测Chrome中无web_accessible_resources的已安装扩展?
需求目标
检测Chrome浏览器中是否安装了满足以下条件的扩展程序(通过网页端JavaScript实现,而非其他扩展程序):
- 无
web_accessible_resources配置 - 未向DOM中添加任何元素
问题背景
Stack Overflow上的多数方案都是关于在一个扩展中检测另一个扩展,但我需要在网站中检测用户是否安装了目标扩展。我曾尝试过两种方法,但均因Chrome会取消对不可访问内容的API调用而失效,相关代码如下:
function detectExtensionUsingImage(extensionId, callback) { const img = new Image(); const src = `chrome-extension://${extensionId}/resources/icon_16.png`; img.src = src; img.onload = function() { callback(true); }; img.onerror = function() { callback(false); } }; detectExtensionUsingImage('aaaaaaaaaaaaaaaaaaaa', (isInstalled) => console.log(isInstalled ? 'Yay!' : 'Nay!')); var detectExtensionUsingScript = function(extensionId, callbackFunc) { var s = document.createElement('script'); s.onerror = () => callbackFunc(false); s.onload = () => callbackFunc(true) document.body.appendChild(s); const src = `chrome-extension://${extensionId}/manifest.json`; s.src = src; } detectExtensionUsingScript('aaaaaaaaaaaaaaaaaaaa',(isInstalled) => console.log(isInstalled ? 'Yay!' : 'Nay!'));
此外,我还尝试过检测扩展的图标,但也未成功。请问是否存在其他方法可以检测这类仅使用popup、无DOM元素添加且无web_accessible_resources配置的已安装扩展?
解决方案
不存在网页端JavaScript方法可以检测这类符合条件的Chrome扩展,核心原因在于Chrome的安全隔离机制:
- 资源隔离限制:未配置
web_accessible_resources的扩展,其内部所有资源(图标、manifest、脚本等)都被Chrome完全隔离,网页无法通过chrome-extension://协议访问这些资源,你之前尝试的图片加载、脚本加载方法必然失效。 - 无外部可观测特征:这类扩展既不向网页DOM注入任何元素,也没有内容脚本进入页面上下文,网页端没有任何可捕捉的DOM变化或全局变量痕迹来判断其存在。
- 权限边界严格:网页脚本运行在独立的沙箱环境,无权调用Chrome的扩展管理API(如
chrome.management)——这类API仅对扩展自身开放,网页端无法触达。
如果必须实现类似检测,只能借助非网页端的方案:
- 开发辅助扩展,利用
chrome.managementAPI检测目标扩展的安装状态,再通过消息传递将结果同步给网页。 - 要求目标扩展添加特定权限或交互逻辑,允许网页主动触发验证,但这需要目标扩展的开发者配合。
内容的提问来源于stack exchange,提问作者Rahul Gandhi
相关产品推荐
相关产品推荐

