我是Firefox Addon SDK的新手,高级API。
我想要做的是,如果用户单击工具栏上的图标,则会打开一个新选项卡,然后运行contentscriptfile中定义的脚本。
我使用下面的脚本:
var self = require("sdk/self");
var tabs = require("sdk/tabs");
var buttons = require('sdk/ui/button/action');
var button = buttons.ActionButton({
id: "mm-link",
label: "Visit mm",
icon: {
"32": "./icon-32.png",
"64": "./icon-64.png"
},
onClick: handleClick
});
function handleClick(state) {
tabs.open("about:blank");
tabs.on('ready', function (tab) {
tab.attach({
contentScriptFile: self.data.url("home.js"),
contentScriptOptions: {"aaa" : "1111", "bob" : "222"}
});
});
}
但它没有按预期工作,并且存在以下问题:
我还尝试将'ready'更改为'activiate',重复运行问题已经消失,但每次创建选项卡时,脚本都会运行。
非常感谢任何帮助。
答案 0 :(得分:4)
问题是您正在收听任何和所有标签的ready
事件,而不是您刚刚打开的标签。一种选择是做这样的事情:
function handleClick(state) {
tabs.open({
url: "about:blank",
onOpen: function onOpen(tab) {
tab.attach({
contentScriptFile: self.data.url("home.js"),
contentScriptOptions: {"aaa" : "1111", "bob" : "222"}
});
}
});
}
使用onOpen
处理程序附加脚本。有关详细信息,请参阅此处的文档:https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/tabs#open%28options%29