0

SDKを使用してFirefox拡張機能を作成しようとしています。(私がXULを避けることができれば私は幸せです)

erikvoldツールバーボタンを使用しています

ただし、ツールバーの画像をその場で変更する必要があります。

私のlib/main.js(バックグラウンドページ)は:

var tbb = require("toolbarbutton").ToolbarButton({
  id: "My-button",
  label: "My menu",
  image: Data.url('off.png'),
  onCommand: function(){
    Tabs.open(Data.url("signin.html"));
  }
});

tbb.setIcon({image:Data.url('on.png')});
console.log(tbb.image);

tbb.moveTo({
  toolbarID: "nav-bar",
  forceMove: false // only move once
});

tbb.imageは正しいですが、ボタンが更新されません。

packages / toolbarbutton-jplib / lib/toolbarbutton.jsを変更してみました

function setIcon(aOptions) {
  options.image = aOptions.image || aOptions.url;
  getToolbarButtons(function(tbb) {
    tbb.image = options.image;
    tbb.setAttribute("image", options.image); // added line
  }, options.id);
  return options.image;
}

しかし、それは更新されていないようです... erik vold libは、この種のニーズに十分対応できますか?

4

3 に答える 3

0

ツールバー ボタンのイメージを更新するために使用できるsetIconメソッドとセッターがあります。image

于 2013-02-07T12:12:33.110 に答える
0

私は同じ問題を抱えていたので、このチュートリアルを使用して自分でコードを書きました: http://kendsnyder.com/posts/firefox-extensions-add-button-to-nav-bar

これを試してください。ニーズに合わせてコードを書き直しました。

var btn = null;
var btnId = 'My-button';
var btnLabel = 'My menu';
var btnIconOn = 'on.png';
var btnIconOff = 'off.png';

var {Cc, Ci} = require('chrome');
var self = require("sdk/self");
var mediator = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator);

// exports.main is called when extension is installed or re-enabled
exports.main = function(options, callbacks) {
    btn = addToolbarButton();
    // do other stuff
};

// exports.onUnload is called when Firefox starts and when the extension is disabled or uninstalled
exports.onUnload = function(reason) {
    removeToolbarButton();
    // do other stuff
};

// add our button
function addToolbarButton() {
    // this document is an XUL document
    var document = mediator.getMostRecentWindow('navigator:browser').document;      
    var navBar = document.getElementById('nav-bar');
    if (!navBar) {
        return;
    }
    var btn = document.createElement('toolbarbutton');  
    btn.setAttribute('id', btnId);
    btn.setAttribute('type', 'button');
    // the toolbarbutton-1 class makes it look like a traditional button
    btn.setAttribute('class', 'toolbarbutton-1');
    // the data.url is relative to the data folder
    btn.setAttribute('image', self.data.url(btnIconOff));
    btn.setAttribute('orient', 'horizontal');
    // this text will be shown when the toolbar is set to text or text and iconss
    btn.setAttribute('label', btnLabel);

    navBar.appendChild(btn);
    return btn;
}

function removeToolbarButton() {
    // this document is an XUL document
    var document = mediator.getMostRecentWindow('navigator:browser').document;      
    var navBar = document.getElementById('nav-bar');
    var btn = document.getElementById(btnId);
    if (navBar && btn) {
        navBar.removeChild(btn);
    }
}

btn.addEventListener('click', function() {
    Tabs.open(Data.url("signin.html"));
}, false);

tbb.setIcon({image:self.data.url(btnIconOn)});
于 2013-06-02T15:05:44.467 に答える
0

また、この修正で必ず更新してください https://github.com/voldsoftware/toolbarbutton-jplib/pull/13/files

于 2013-01-18T15:20:06.547 に答える