检查用户是否安装了第三方 Chrome 扩展程序

IT技术 javascript google-chrome google-chrome-extension
2021-02-25 03:11:15

我目前正在尝试检测用户是否安装了某个 Chrome 扩展程序。Chrome 扩展程序不是我自己的,我没有它的源代码。我在许多帖子中尝试过方法,但都失败了。我尝试过的方法以及失败的原因详述如下。

这会在执行时导致“无法读取未定义的属性连接”:

var myPort=chrome.extension.connect('idldbjenlmipmpigmfamdlfifkkeaplc', some_object_to_send_on_connect);

尝试按如下方式加载扩展程序的资源以测试它是否存在,但在浏览器中转到此 URL 会导致“找不到您的文件”Chrome 错误页面(请注意,我通过转到 C:\Users\\ 找到了此路径AppData\Local\Google\Chrome\User Data\Default\Extensions\idldbjenlmipmpigmfamdlfifkkeaplc\1.0.0.1_0\ 在我的 Windows 本地机器上):

chrome-extension://idldbjenlmipmpigmfamdlfifkkeaplc/1.0.0.1_0/icon_16.png

使用 Chrome 管理,但这会导致执行时控制台错误“无法读取未定义的属性获取”

chrome.management.get("idldbjenlmipmpigmfamdlfifkkeaplc", function(a){console.log(a);});

我遇到的大多数其他答案似乎都涉及由试图检查它的同一个人编写的扩展。

1个回答

假设您从网站上需要它

connect/message方法意味着扩展程序专门将您的网站列在它期望连接的来源列表中。除非您自己编写此扩展程序,否则这不太可能,因为这不能是通配符域。

从 Web 上下文引用扩展中的文件将 返回 404模拟网络错误,除非扩展将它们声明为 web-accessible这曾经在 2012 年之前有效,但谷歌将其作为指纹识别方法关闭 - 现在扩展必须明确列出可以访问的资源。您特别提到的扩展程序没有列出任何可通过网络访问的文件,因此该路径也已关闭。

chrome.management是一个扩展API;网站根本无法使用它。

最后,如果扩展程序具有以某种方式修改网页 DOM 的内容脚本,您可能会检测到这些更改。但它不是很可靠,因为内容脚本可以改变它们的逻辑。同样,在您的特定情况下,扩展程序会侦听 DOM 事件,但无论如何都不会明确接收到事件 - 因此该路由已关闭。

请注意,一般情况下,您无法确定内容脚本代码是否与您的脚本代码一起运行,因为它在隔离的上下文中运行

总而言之,这个问题没有神奇的解决方案。扩展必须合作才能被发现,你不能绕过它。

假设您从另一个扩展中需要它

来源白名单connect/message方法默认为所有扩展;但是,要使其工作,目标扩展需要侦听onConnectExternalonMessageExternal事件,这并不常见。

Web 可访问的资源对于从其他扩展程序访问也有同样的限制,因此情况并没有好转。

使用您自己的内容脚本观察页面的更改是可能的,但同样可能没有可观察的页面,您不能依赖这些更改始终相同。

与扩展-网页交互类似,来自不同扩展的内容脚本在隔离的上下文中运行,因此无法直接“捕捉”正在运行的代码。

chrome.management来自扩展的API是检测正在安装的 3rd 方扩展的唯一可靠方法,但请注意,它需要"management"获得许可并带有可怕的警告。

对于其他处理相同问题的人。请记住,chrome.managementAPI 仅在后台脚本中可用。它将undefined在内容脚本中返回
2021-04-25 03:11:15