You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何检测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

火山引擎 最新活动