【问题标题】:JavaScript check if browser extension is installed for Chrome, Firefox and OperaJavaScript 检查是否为 Chrome、Firefox 和 Opera 安装了浏览器扩展
【发布时间】:2013-01-18 12:02:21
【问题描述】:


我想在我们的网站上显示自定义栏(通知,如:安装我们的插件。)如果未安装 Chrome、Firefox 和 Opera 的扩展程序。如果安装了扩展,则不会显示任何内容。

这个想法是
1. 用户访问我们的网站并出现一个带有消息的栏 - “嘿,安装我们的扩展程序”。
2. 用户点击安装并安装扩展。用户无需打开它。
3. 用户再次访问我们的网站,安装扩展后,该栏不再出现。
我们只讨论安装检查,而不是 cookie

到目前为止,我只能找到适用于 Chrome 的解决方案:http://blog.kotowicz.net/2012/02/intro-to-chrome-addons-hacking.html
和火狐:http://webdevwonders.com/detecting-firefox-add-ons/
Opera 从未被提及。

有没有办法为 Opera 做这件事,基于检查作为扩展的一部分的本地资源的想法:
chrome-extension://--扩展 ID--/blank.gif
Firefox chrome://firebug/content/blank.gif

否则: 有没有一种简单的方法来检查是否为 Chrome、Firefox 和 Opera 安装了扩展程序?

【问题讨论】:

  • 如果扩展愿意合作就很容易了
  • 或者如果该扩展程序留下了可追溯的信息,例如 DOM 中的一些独特元素或属性。
  • 或者如果该扩展在全球范围内留下了一些东西 - 这就是我所说的合作
  • 如果您尝试自动检测广告拦截,您可以给它一个蜜罐 - 或者只是测试您添加的真实广告是否存在。
  • 那么,您要检测的扩展名是什么?

标签: javascript firefox opera


【解决方案1】:

如果扩展愿意合作,它可以很容易地向文档宣传它的存在。例如:


扩展可以做

window.$$myExt = ...

然后你可以通过

检测扩展
if(typeOf $$myExt !== 'undefined'){...

(或其任何变体)

获取页面windowsomewhat tricky at least


扩展可以做

document.body.classList.add("myExt-visited")

然后你可以通过

检测扩展
if(document.body.classList.contains("myExt-visited")){...

扩展可以做

document.body.innerHTML += "<div id='myExt-toolbar'>..."
// or $('body').append("<div id='myExt-toolbar'>...");

那么你可以通过

检测扩展
if(document.getElementByID("myExt-toolbar")){...
// or if($("#myExt-toolbar").length){...

或者,你可以这样做

<div id="myExt-replacement">
   ...

而且扩展会做

var replacement = document.getElementByID("myExt-replacement");
replacement && replacement.remove();

或者你可以这样做

function onMyExtExists(){
  ...
}

而且扩展会做

onMyExtExists && onMyExtExists();

【讨论】:

  • 好吧,这显然是唯一一种可能的解决方案,因为在 Opera 中,浏览器 js 无法签入已安装的扩展程序。我希望我以后能写回详细的解决方案。
  • window.$$myExt = ... 会在扩展​​架构中的哪个位置?
  • @bgadoci 只要它想被检测到。也就是说,尽快,因为在扩展程序使自己可见之前无法运行扩展程序检测。
  • 扩展中的“窗口”对象与网站的“窗口”不同。他们无法通过该渠道进行交流。
  • @geedew unsafeWindow 会为此目的工作吗?如果没有,会怎样?
猜你喜欢
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 2013-07-19
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多