我目前正在尝试检测用户是否安装了某个Chrome扩展程序。Chrome扩展程序不是我自己的,我没有源代码。我已经在很多帖子中尝试过方法,但是它们都失败了。下面详细介绍了我尝试过的方法以及失败的原因。
当执行时,这导致“无法读取未定义的属性连接”:
var myPort=chrome.extension.connect('idldbjenlmipmpigmfamdlfifkkeaplc', some_object_to_send_on_connect);
尝试按以下方式尝试加载扩展资源,以测试扩展资源是否存在,但在浏览器中转到该URL会导致“找不到您的文件” Chrome错误页面(请注意,我通过转到C:\ Users \\找到了此路径Windows本地计算机上的AppData \ Local \ Google \ Chrome \ User Data \ Default \ Extensions \ idldbjenlmipmpigmfamdlfifkkeaplc \ 1.0.0.1_0 \):
chrome-extension://idldbjenlmipmpigmfamdlfifkkeaplc/1.0.0.1_0/icon_16.png
使用Chrome管理,但执行时会导致控制台错误“无法读取未定义的属性”
chrome.management.get("idldbjenlmipmpigmfamdlfifkkeaplc", function(a){console.log(a);});
我遇到的大多数其他答案似乎都涉及由试图检查扩展名的同一人编写的扩展名。
connect
/message
方法表示该扩展名在您希望与其建立联系的来源列表中专门列出了您的网站。除非您自己编写此扩展名,否则这不太可能,因为这不能是通配符域。
从Web上下文引用扩展名内的文件将 返回404模拟网络错误,除非扩展程序将其声明为可通过Web访问。该方法以前在2012年之前就可以使用,但是Google将该方法作为一种指纹识别方法予以关闭-现在,扩展程序必须显式列出可以访问的资源。您具体提到的扩展名未列出任何可通过Web访问的文件,因此此路由也已关闭。
chrome.management
是扩展API;网站根本无法使用它。
最后,如果扩展程序的内容脚本以某种方式修改了网页的DOM,则您可能会检测到这些更改。但这不是很可靠,因为内容脚本可以更改其逻辑。同样,在您的特定情况下,扩展程序侦听DOM事件,但无论如何都无法明确接收到该事件-因此此路由已关闭。
请注意,通常,您无法确定内容脚本代码是否与您的脚本一起运行,因为它在隔离的上下文中运行。
总而言之,这个问题没有神奇的解决方案。扩展必须协作才能被发现,您不能绕过它。
connect
/message
方法列入白名单的来源默认为所有扩展名;但是,要使其正常工作,目标扩展程序需要侦听onConnectExternal
或onMessageExternal
事件,这是不常见的。
可通过Web访问的资源对来自其他扩展名的访问具有相同的限制,因此情况并不更好。
可以使用自己的内容脚本查看页面的更改,但是同样可能没有可观察的页面,并且您不能依赖那些始终相同的更改。
与扩展程序网页交互类似,来自不同扩展程序的内容脚本在隔离的上下文中运行,因此不可能直接“捕获”正在运行的代码。
chrome.management
扩展程序中的API是检测已安装的第三方扩展程序的唯一保证方法,但请注意,它需要"management"
经过许可并带有可怕的警告。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句