2012-04-18 135 views
0

这里是我的代码:当扩展B安装时,chrome.management.onInstalled.addListener警报扩展A可以吗?

... 
if($("input:checked").length > 0) { 
    chrome.tabs.create(
     {url:"http://www.multiculturalyp.com/multiculturalypnewtab.crx"}, 
     function(tab) { 
      chrome.management.onInstalled.addListener(function(info){alert("Installed A");}); 
      chrome.management.onEnabled.addListener(function(info){alert("Enabled A");}); 
     } 
    ); 
    chrome.tabs.create(
     {url:"instructions.html"}, 
     function(tab) { 
      chrome.management.onInstalled.addListener(function(info){alert("Installed B");}); 
      chrome.management.onEnabled.addListener(function(info){alert("Enabled B");}); 
     } 
    ); 
} 
... 

所以发生了什么:我写了一个扩展,如果用户因此从与扩展的选项选择,第二个扩展安装,所以我在的形式发射指令HTML告诉用户如果他们真的想要安装它,点击什么。我想隐藏说明(关闭说明选项卡)第二个扩展程序会自动安装。问题是看起来onInstalled和onEnabled事件都没有被触发。我上面的例子是一个逻辑的简化版本,当事件被触发时就会发出警报,但到目前为止我无法获得扩展B的onInstalled事件在扩展A中被触发。我每次注册事件两次,当他们没有第一次工作。在A或B中的警报刚刚结束告诉我,是否第一个注册的监听器,第二个或两个被触发,但都应该得到扩展A.触发

所以可以这样做?如果是这样,我做错了什么。

在此先感谢。

+0

您是否在清单文件中拥有适当的权限? – hamczu 2012-04-24 00:43:13

+0

manifest.json的权限部分:“permissions”:[“tabs”,“management”,“extension”] – 2012-04-24 12:08:30

回答

1

我的建议 - 尝试在执行带扩展名的网址之前绑定事件。绑定事件一次,并检查其类型以进行操作(在后台页面中):

chrome.management.onInstalled.addListener(function(info){ 
     if(info.id == MY_EXTENSION_ID){ 
      alert("Installed"); 
     }    
    }); 

    chrome.management.onEnabled.addListener(function(info){ 
     if(info.id == MY_EXTENSION_ID){ 
      alert("Enabled"); 
     } 
    }); 

    chrome.tabs.create({url:"http://www.multiculturalyp.com/multiculturalypnewtab.crx"}, 
     function(tab) {alert('tab was opened')}); 
+0

也没有效果。我的扩展是一个弹出:......“browser_action”:{“default_icon”:“的icon.png”,\t“default_popup”:“popup.html”},...我不知道如果监听器不会被触发,因为弹出当chrome.tabs.create被调用时会消失 – 2012-04-24 12:15:59

+0

当然 - 你这个事件应该在后台页面。 Popup可以随时关闭! – hamczu 2012-04-24 15:28:00

+0

如何设置Chrome扩展的后台页面? – 2012-04-24 18:23:40