Как использовать oncommand в опциях.ксул для того, чтобы вызвать функцию на ушко.js?


Я пытаюсь вызвать метод changePassword () из bootstrap.файл js, но я не могу понять, как это сделать.. Загрузчик.js находится в корне папки проекта и параметров.ксуль тоже здесь ./ chrome / content /

<setting type="control" title="&passwordBtn;">
<button label="&passwordBtn;" oncommand="changePassword();"/>
</setting>

Заранее спасибо! :)

1 2

1 ответ:

Во-первых, измените свои параметры.xul добавьте атрибут id для последующего выбора, ему не нужен атрибут oncommand, поэтому мы можем удалить его.

<setting type="control" title="&passwordBtn;">
    <button id="password" label="&passwordBtn;" />
</setting>

Затем откройте панель настроек и добавьте прослушиватель событий, нажатый на кнопку, вручную. Ниже приведен пример bootstrap.js

const log = function() { dump(Array.slice(arguments).join(' ') + '\n'); }

const {classes: Cc, interfaces: Ci} = Components;
const OBS = Cc['@mozilla.org/observer-service;1']
              .getService(Ci.nsIObserverService);

const myAddonId = 'my_addon_id' // same as install.rdf "<em:id>" tag value

let optionObserver = {
    observe: function(subject, topic, data) {
        if (topic !== 'addon-options-displayed' || data !== myAddonId) {
            return;
        }
        let document = subject.QueryInterface(Ci.nsIDOMDocument);
        let button = document.getElementById('password');
        button.addEventListener('command', this.changePassword);
    },
    changePassword: function(event) {
        log('password button clicked!');
        // do your stuff...
    }
}

let install = function(data, reason) {};
let uninstall = function(data, reason) {};

let startup = function(data, reason) {
    OBS.addObserver(optionObserver, 'addon-options-displayed', false);
};

let shutdown = function(data, reason) {
    OBS.removeObserver(optionObserver, 'addon-options-displayed', false);
};