Сделать панель доступной только для определенных URL - PullRequest
4 голосов
/ 12 февраля 2012

В Chrome есть что-то под названием "Действия страницы" , и я примерно пытаюсь воспроизвести эту функциональность с помощью Firefox Addon SDK / Jetpack.Вероятно, есть лучший подход, чем тот, который я пробовал до сих пор, и я открыт для предложений.

Используя tabs, я могу прослушивать готовые вкладки и активировать события, и если вкладкиURL соответствует, виджет аддона должен быть включен;если нет, отключено.Я дошел до того, что могу изменить значок, когда это уместно, но я бы тоже хотел отключить панель.

Стратегия 1: украсть событие click и показывать панель только в том случае, если мына правой странице;в противном случае игнорируйте.Проблема в том, что в соответствии с документами , ручное отображение панели приводит к тому, что она не привязывается, ошибка, которая не имела большого прогресса на ней .

Стратегия 2:Установите contentURL на null при отключении.Получите сообщение об ошибке, что он не является URL-адресом.

Стратегия 3: используйте другой документ HTML для отключенного состояния.Установка panel.contentURL для другого URL не работает после перехода на другую страницу?

Вот код:

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);

Связано, но должна ли быть проблема с привязкой? Как перезагрузить всплывающую панель виджетов с помощью Firefox Addon SDK?

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Если вы все еще не решили свою проблему (и для тех, у кого есть аналогичная проблема):

У меня была похожая проблема, и я решил ее с помощью пакета ToolbarButton от erikvold. После того, как вы установили это и его зависимости, что-то вроде этого в вашем файле 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
});

Надеюсь, вы сможете найти способ адаптировать это к своему проекту.

0 голосов
/ 08 апреля 2013

toolbarbutton.ToolbarButton ({id: "MyAddon", метка: "My Addon", tooltiptext: "My Addon Tooltip", изображение: 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();

}});

...