1

我们为我们的应用创建了一个 chrome 扩展。我们在放置在导航栏上的“扩展图标”的 CLICK 事件中从“js 文件”调用 METHOD。为此,我们使用 app.js(包含要在图标单击时调用的 METHOD 的文件)和 background.html(使用此 html 中包含的 js 文件)之间的消息传递。用于传递消息的脚本是:(来自 background.html)

chrome.browserAction.onClicked.addListener(function (tab) {
    chrome.tabs.sendMessage(tab.id, "showPopup");
});

并收听消息:(在 app.js 中)

chrome.extension.onMessage.addListener(function(request) {
   if (request === "showPopup") {
      showPopup();
   }
});

点击事件按预期工作。但是现在我们想在 Mozilla 扩展中做同样的事情。而且我们不能通过点击图标将消息传递给app.js,以便它可以执行包含的方法。

我们还使用 pageMod 添加了 app.js,类似这样

exports.main = function(options, callbacks) {
  pageMod.PageMod({
    include: ["*"],
    contentScriptWhen: 'start',
    contentScriptFile: [data.url('jquery-1.7.1.min.js'),data.url('app.js')]      
  });
  createAndAddNavBarButton();   
};

function createAndAddNavBarButton() {
   var navBar = document.getElementById('nav-bar');//assume document has been defined
   if (!navBar){return;};       
   var nbBtn = document.createElement('navbaricon');    
       nbBtn.setAttribute('id', 'navButton');
       nbBtn.setAttribute('image', data.url('icon_16.png'));        
       nbBtn.onclick = function(){
           showPopup();                    
           return true;
       }    
   navBar.appendChild(btn);
}

但是 click 事件什么也不做,并且 showPopup() 是未定义的。当 app.js 中与它关联的新页面加载事件执行时没有任何错误,但点击事件不起作用。

有没有一种方法可以将点击事件直接分配给这个图标,就像我们在 chrome 扩展的情况下所做的那样。

4

2 回答 2

1

许多附加组件使用 Erik Vold 的这个第 3 方模块:

https://github.com/erikvold/toolbarbutton-jplib/

未来我们计划在 Firefox 中添加类似的小部件,供任何插件开发者使用。

于 2012-10-12T03:34:17.283 回答
0

能够通过消息传递向 app.js 脚本发送消息。我们只需要在消息传递的范围内添加app.js文件,这样就可以和javascript进行通信了。

nbBtn.addEventListener('click', function() {
   var workers = tabs.activeTab.attach({                    
       contentScriptFile: [ data.url("jquery-1.7.1.min.js"), data.url("app.js")]
   });
   workers.postMessage("doABC");
}, false) 

 navBar.appendChild(nbBtn);

现在在 app.js 中,我们可以接收到这条消息并显示弹出窗口

于 2012-10-18T13:02:40.397 回答