使面板仅适用于某些URL

时间:2012-02-11 23:22:14

标签: firefox-addon firefox-addon-sdk

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?

2 个答案:

答案 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();

} });