JavaScript检查是否为Chrome、Firefox和Opera安装了浏览器扩展

JavaScript检查是否为Chrome、Firefox和Opera安装了浏览器扩展,javascript,firefox,opera,Javascript,Firefox,Opera,如果没有为Chrome、Firefox和Opera安装扩展,我想在我们的网站上显示自定义栏(通知:安装我们的插件)。如果安装了扩展,将不显示任何内容 这个想法是: 1.用户访问我们的站点时,会出现一个带有消息的栏-“嘿,安装我们的扩展”。 2.用户单击安装并安装扩展。用户无需打开它。 3.用户再次访问我们的站点,安装扩展后,该栏不再显示。 我们只讨论安装检查,而不是cookie 到目前为止,我只能为Chrome找到解决方案: 和Firefox: 歌剧从未被提及 基于检查本地资源(扩展的一部分)的


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

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

到目前为止,我只能为Chrome找到解决方案:
和Firefox:
歌剧从未被提及

基于检查本地资源(扩展的一部分)的想法,Opera有没有办法做到这一点:
铬-extension://--Extension ID--/blank.gif
火狐chrome://firebug/content/blank.gif

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

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


分机可以吗

window.$$myExt = ...
document.body.classList.add("myExt-visited")
document.body.innerHTML += "<div id='myExt-toolbar'>..."
// or $('body').append("<div id='myExt-toolbar'>...");
然后,您可以通过以下方式检测扩展:

if(typeOf $$myExt !== 'undefined'){...
if(document.body.classList.contains("myExt-visited")){...
if(document.getElementByID("myExt-toolbar")){...
// or if($("#myExt-toolbar").length){...
(或其任何变更)

获取页面
窗口


分机可以吗

window.$$myExt = ...
document.body.classList.add("myExt-visited")
document.body.innerHTML += "<div id='myExt-toolbar'>..."
// or $('body').append("<div id='myExt-toolbar'>...");
然后,您可以通过以下方式检测扩展:

if(typeOf $$myExt !== 'undefined'){...
if(document.body.classList.contains("myExt-visited")){...
if(document.getElementByID("myExt-toolbar")){...
// or if($("#myExt-toolbar").length){...

分机可以吗

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

或者,你也可以这样做

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

或者你也可以

function onMyExtExists(){
  ...
}
扩展就行了

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

如果扩展愿意合作,或者如果该扩展在DOM中留下了一些可跟踪的信息,比如一些唯一的元素或属性,或者如果该扩展在全局范围内留下了一些东西,这就是我所说的合作,如果您试图自动检测adblock,你可以给它一个蜜罐——或者只是测试你添加的真实广告的存在。那么,你想检测的扩展是什么呢?很明显,这是唯一一个可能的解决方案,因为在Opera中,浏览器js无法检入一个已安装的扩展。我希望稍后能回信提供详细的解决方案。在扩展架构中的什么位置将
窗口。$$myExt=…
go?@bgadoci,只要它想被检测到就可以。也就是说,尽可能快,因为在扩展自身可见之前无法运行扩展检测。扩展中的“窗口”对象与网站中的“窗口”不同。他们无法通过该频道进行通信。@geedew
unsafeWindow
是否可以用于此目的?如果没有,你会怎么做?