我们为我们的应用创建了一个 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 扩展的情况下所做的那样。