【问题标题】:Detect installed extensions in browsers?检测浏览器中已安装的扩展程序?
【发布时间】:2014-03-07 15:36:05
【问题描述】:

是否可以通过 JS 检测用户在其浏览器上安装了哪些扩展程序/插件?用例是一个特定的 chrome 扩展,Autofill 将一些文本值设置到隐藏的 zip 字段中,导致一些验证失败,我想向用户显示此扩展可能会产生问题的消息。

【问题讨论】:

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


【解决方案1】:

对于 Firefox:代码的第一个 sn-p:AddonManager.jsm - MDN

Components.utils.import("resource://gre/modules/AddonManager.jsm");

AddonManager.getAllAddons(function(aAddons) {
  // Here aAddons is an array of Addon objects
});
// This code will execute before the code inside the callback

必须在私有 javascript 中运行此代码,而不是在选项卡中。你可以试试specialPowers 虽然我不知道它是如何工作的。

要从您的站点运行私有脚本,您必须创建一个 firefox 插件和 addEventListener's 到您的站点,就像列出插件的按钮一样,您需要为其附加一个私有函数。

使用插件您可以启用/禁用插件,但用户会觉得这很烦人,因为插件有时会在安装时做一些 obtrsuvie 的事情。

【讨论】:

  • 这对我的用例没有帮助,因为需要安装一个单独的插件。
  • 亲爱的@Noitidart,我在 index.js 中使用您的代码如下: const {AddonManager} = require("resource://gre/modules/AddonManager.jsm"); AddonManager.getAllAddons(function(aAddons) { // 这里 aAddons 是一个 Addon 对象数组 });
    但是它不起作用
  • 哦,不需要@H.Aqjn 你应该导入。所以var {Cu} = require('chrome'); 然后做Cu.import('resoruce://gre/modules/AddonManager.jsm') 然后它会工作。
  • 亲爱的@Noitidart,您的评论很有帮助,但是我想在AddonManager.getAllAddons(function(aAddons){ ...}); 之外使用aAddons,这是一个异步回调函数。即使我定义了一个全局变量,它也会返回给我undefined
  • 我通过设置var{Timeout}=require{"sdk/timers"}; 使用Timeout 处理了这个问题,这是一个好方法吗?一般当客户端的插件被禁用或停用或删除时,less-privileged external page as my server是否可以检索我们privileged java-script as my client的插件信息?
【解决方案2】:

特别是对于 Chrome 扩展,只能检测到某些扩展,所以这不是一个很好的方法,但据我所知,已经没有任何可靠的方法来检测浏览器扩展。

对于您要检测的扩展,您需要其扩展 ID 及其 Web 可访问资源。

有些扩展程序具有可访问网络的资源,有些则没有。如果没有 Web 可访问资源,您将无法检测到该扩展程序。

要查找 Web 可访问资源,您需要查看扩展名 chrome.manifestfile。它会告诉您是否有网络可访问的内容。例如,chrome.manifest 文件可能会说:

content web-developer content/web-developer/contentaccessible=yes

一般来说,寻找浏览器扩展不是很有效,因为您必须提前知道要检测哪些扩展,而且很多时候它们是无法检测到的。

另外,这是我尝试做同样事情时使用的一个很好的链接here

【讨论】:

    【解决方案3】:

    【讨论】:

    • 是的,它适用于插件,我正在使用它来检测 Shockwave 播放器
    • 对。但是,我想检测附加组件而不是插件。
    【解决方案4】:

    在 JavaScript 中检查 zip 字段在隐藏时是否已更改,并向用户显示扩展可能导致问题的警告。

    【讨论】:

      【解决方案5】:

      对于 Firefox,您可以使用 Mochitest/SpecialPowersAPI 来完成

      https://developer.mozilla.org/en-US/docs/SpecialPowers

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-17
        • 1970-01-01
        • 2017-01-15
        • 2017-03-14
        • 2014-06-21
        • 1970-01-01
        • 2017-11-14
        • 2010-12-26
        相关资源
        最近更新 更多