Chrome有一个名为"Page Actions"的东西,我大致试图用Firefox Addon SDK / Jetpack复制该功能。可能有比我迄今为止尝试过的更好的方法,我愿意接受建议。
使用tabs
,我能够监听标签就绪和激活事件,如果标签的URL匹配,则应启用插件小部件;如果没有,禁用。我已经到了可以在适当的时候更改图标的地步,但我也想禁用该面板。
策略1:窃取点击事件,如果我们在右页,则只显示面板;否则,忽略。问题是,according to the docs,手动显示该面板导致其无法锚定,a bug that's not had much progress on it。
策略2:禁用时将contentURL
设置为null
。得到一个错误,抱怨它不是一个URL。
策略3:为禁用状态使用不同的HTML文档。将panel.contentURL
设置为其他网址后,转到其他网页后无效?
以下是代码:
const widgets = require("widget");
const Panel = require("panel").Panel;
const tabs = require("tabs");
const data = require("self").data;
const prefs = require("simple-prefs").prefs;
var panel = Panel({
width: 480,
height: 640,
contentURL: data.url("panel.html"),
contentScriptFile: [data.url('jquery.min.js'), data.url('panel.js')],
onMessage: function (msg) { console.log(msg) }
});
var widget = widgets.Widget({
id: "icon",
label: "Export",
contentURL: data.url("icon.png"),
panel: panel
});
function enable() {
widget.contentURL = data.url('icon.png');
panel.contentURL = data.url("panel.html");
}
function disable() {
widget.contentURL = data.url('icon_disabled.png');
panel.contentURL = data.url("panel_disabled.html");
}
function on_change_tab(tab) {
console.log(tab.url);
if (/http:\/\/example.com\/.*/.exec(tab.url)) {
console.log('ENABLE');
enable();
} else {
console.log('DISABLE');
disable();
}
console.log(panel.contentURL);
}
tabs.on('ready', on_change_tab);
tabs.on('activate', on_change_tab);
相关,但应该有锚定问题吗? How to reload a widget popup panel with firefox addon sdk?
答案 0 :(得分:2)
如果您仍未解决问题(以及其他遇到类似问题的人):
我遇到了类似的问题,并使用erikvold的ToolbarButton软件包解决了这个问题。一旦你安装了它及其依赖项,你的main.js文件中的这样的东西应该可以工作。
var pan = require("panel").Panel({
width: 400,
height: 600,
contentURL: "http://stackoverflow.com"
//maybe some more options here
});
var button = require("toolbarbutton").ToolbarButton({
id: "myButton",
label: "My Button",
image: data.url("someicon.png"),
panel: pan //This binds the panel to this toolbarbutton
});
我希望你能找到一些方法来适应你的项目。
答案 1 :(得分:0)
toolbarbutton.ToolbarButton({ id:“MyAddon”, 标签:“我的插件”, tooltiptext:“我的插件工具提示”, image:data.url(“logo.png”), onCommand:function(){
var dictionary_panel = require("panel").Panel({
width:630,
height:600,
contentURL: data.url("HtmlPage.html"),
contentScriptWhen: 'ready',
contentScriptFile: [data.url("style.css"),data.url("jquery-1.7.1.js"),
data.url("javascriptquezz.js"),data.url("create.js")]
});
dictionary_panel.show();
} });