【问题标题】:Check if user has a third party Chrome extension installed检查用户是否安装了第三方 Chrome 扩展程序
【发布时间】:2017-02-15 07:30:25
【问题描述】:

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

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

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

尝试按如下方式加载扩展程序的资源以测试它是否存在,但在浏览器中转到此 URL 会导致“找不到您的文件”Chrome 错误页面(请注意,我通过转到 C:\ 找到了此路径我的 Windows 本地计算机上的 Users\\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);});

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

【问题讨论】:

  • @wOxxOm 在第二句中表示这是第三部分扩展。
  • 哎呀,我确实假设了网页代码。对不起。
  • @wOxxOm 啊,我知道我为什么这么认为。 chrome.extension.connect 将在任何扩展上下文中定义。
  • 考虑采纳How to Detect Browser Extensions上的建议

标签: javascript google-chrome google-chrome-extension


【解决方案1】:

假设您从网站需要它

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

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

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

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

请注意,一般情况下,您无法确定内容脚本代码与您的代码一起运行,因为它是runs in an isolated context

总而言之,这个问题没有神奇的解决方案。扩展程序必须配合才能被发现,您无法绕过它。

假设您需要另一个扩展程序

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

Web 可访问资源对其他扩展的访问具有相同的限制,因此情况并不好。

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

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

来自扩展程序的chrome.management API 是检测正在安装的第 3 方扩展程序的唯一可靠方法,但请注意,requires "management" permission 带有可怕的警告。

【讨论】:

  • 对于其他处理相同问题的人。请记住chrome.management API 仅在后台脚本中可用。它将在内容脚本中返回undefined
猜你喜欢
  • 2011-09-11
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多