Gre*_*egH 3 javascript google-chrome google-chrome-extension
我目前正在尝试检测用户是否安装了某个 Chrome 扩展程序。Chrome 扩展不是我自己的,我没有它的源代码。我在很多帖子中尝试过方法,但都失败了。下面详细介绍了我的尝试以及失败的原因。
这会导致执行时“无法读取未定义的属性连接”:
var myPort=chrome.extension.connect('idldbjenlmipmpigmfamdlfifkkeaplc', some_object_to_send_on_connect);
Run Code Online (Sandbox Code Playgroud)
尝试按如下方式加载扩展程序的资源以测试它是否存在,但在浏览器中访问此 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
Run Code Online (Sandbox Code Playgroud)
使用 Chrome 管理,但这会导致执行时出现控制台错误“无法读取未定义的属性”
chrome.management.get("idldbjenlmipmpigmfamdlfifkkeaplc", function(a){console.log(a);});
Run Code Online (Sandbox Code Playgroud)
我遇到的大多数其他答案似乎都涉及扩展是由试图检查它的同一个人编写的。
connect/message方法意味着扩展程序在其期望连接的来源列表中专门列出了您的网站。除非您自己编写此扩展,否则这种情况不太可能发生,因为这不能是通配符域。
从网络上下文引用扩展内的文件将返回 404模拟网络错误,除非扩展将它们声明为 web-accessible。这在 2012 年之前是有效的,但 Google 将其作为指纹识别方法关闭——现在扩展程序必须显式列出可以访问的资源。您特别提到的扩展程序未将任何文件列为可通过网络访问,因此该路线也已关闭。
chrome.management是一个扩展API;网站根本无法使用它。
最后,如果扩展程序具有以某种方式修改网页 DOM 的内容脚本,您可能会检测到这些更改。但它不是很可靠,因为内容脚本可以改变它们的逻辑。同样,在您的具体情况下,扩展程序会侦听 DOM 事件,但无论如何都不会明确收到事件 - 因此该路由已关闭。
请注意,一般来说,您无法确定内容脚本代码与您的脚本代码一起运行,因为它在隔离的上下文中运行。
总而言之,这个问题没有神奇的解决方案。扩展程序必须配合才能被发现,并且您无法绕过这一点。
connect/message方法默认列入所有扩展名的起源白名单;但是,要实现此目的,目标扩展需要侦听onConnectExternal或onMessageExternal事件,这并不常见。
Web 可访问的资源对于其他扩展的访问也有相同的限制,因此情况也好不到哪儿去。
使用您自己的内容脚本观察页面的更改是可能的,但同样可能没有可观察到的更改,并且您不能依赖这些更改始终相同。
与扩展程序与网页交互类似,来自不同扩展程序的内容脚本在隔离的上下文中运行,因此不可能直接“捕获”正在运行的代码。
chrome.management来自扩展程序的API是检测正在安装的第 3 方扩展程序的唯一可靠方法,但请注意,它需要"management"许可并带有可怕的警告。
| 归档时间: |
|
| 查看次数: |
3247 次 |
| 最近记录: |