背景
已知一些Chrome插件会影响到网站的一些功能,希望在前端主动检测到用户使用了某插件然后弹出提示让用户关闭,以减少客诉
方法
1. 检测资源文件
如图获取插件的ID
启用插件后,打开 chrome-extension://${ID}/manifest.json
找到 web_accessible_resources
字段:
取其中一个资源url,如:chrome-extension://gighmmpiobklfepjocnamgkkbiglidom/icons/icon24.png
注意:如果这里是正则匹配,可以尝试从其他字段或插件源码上找到资源 url
然后通过 fetch url,如果能成功获取则使用了插件。
fetch(url)
.then(() => {
console.log('使用了插件')
}).catch(() => {
console.log('未使用插件')
})
这种方法只适用于配置了 web_accessible_resources
的插件,这个配置下的 url 可以被网站直接访问,没有配置的 url 在 fetch 时会报错:Denying load of chrome-extension://<extension id>/<path to file>. Resources must be listed in the web_accessible_resources manifest key in order to be loaded by pages outside the extension
2. 检查页面元素
有些插件会在页面中插入元素或样式代码,可以通过搜索一些特殊字符串发现:
if (document.querySelector('xxx') || document.documentElement.innerHTML.includes('yyy')) {
console.log('使用了插件')
}