X-0034 拡張機能インストール後の初回起動時に、ツールバーにボタンを自動的に追加する

FirefoxやThunderbirdの「ツールバーにボタンを追加して使う」系の拡張機能では、ツールバーのカスタマイズ用パレットの中に追加されたボタンをユーザが自分でツールバーに追加しなくてはならないため、初心者ユーザを戸惑わせてしまう危険性があります。

こういう場合、拡張機能をインストールした直後の起動時に自動的にボタンを追加するような処理があると、ユーザーフレンドリーになります。以下は、それを実現する処理の例です。


window.addEventListener('load', function() {

  function getPref(aPrefstring) {
    // 省略
  }

  function setPref(aPrefstring, aValue) {
    // 省略
  }

  var STRBUNDLE = Components.classes['@mozilla.org/intl/stringbundle;1'].getService(Components.interfaces.nsIStringBundleService);
  var msg = STRBUNDLE.createBundle('chrome://***/locale/***.properties');

  var PromptService = Components.classes['@mozilla.org/embedcomp/prompt-service;1'].getService(Components.interfaces.nsIPromptService);


  // 重要なのはここから!

  // 拡張機能のID
  const PREFROOT = 'extensions.{********-****-****-****-************}';
  // ボタンを追加するツールバー。「nav-bar」はFirefoxの場合。
  var bar = document.getElementById('nav-bar');
  if (bar && bar.currentSet) {
    var currentset = bar.currentSet;
    var buttons = currentset.replace(/__empty/, '').split(',');
    var initial = [ // ボタンのID名を配列として指定
        '***',
        '***'
      ];
    for (var i in initial)
    {
      if (!getPref(PREFROOT+'.initialshow.'+initial[i])) {
        if (currentset.indexOf(initial[i] < 0))
          buttons.push(initial[i]);
        setPref(PREFROOT+'.initialshow.'+initial[i], true);
      }
    }
    currentset = bar.currentSet;
    var newset = buttons.join(',');
    if (currentset != newset &&
        PromptService.confirmEx( // 勝手に追加する前に確認
          window,
          msg.GetStringFromName('initialshow_confirm_title'),
          msg.GetStringFromName('initialshow_confirm_text'),
          (PromptService.BUTTON_TITLE_YES * PromptService.BUTTON_POS_0) +
          (PromptService.BUTTON_TITLE_NO  * PromptService.BUTTON_POS_1),
          null, null, null, null, {}
        ) == 0) {
      bar.currentSet = newset;
      bar.setAttribute('currentset', newset);
      document.persist(bar.id, 'currentset');
    }
  }

}, false);



/* 以下、ロケールの内容

  initialshow_confirm_title=Do you want custom buttons to be added?
  initialshow_confirm_text=Installation of Rewind/Fastforward Buttons extension requires inserting custom buttons to the toolbar.\nDo you want buttons to be added?\n(Buttons can be added/removeed from "View" > "Toolbars" > "Customize..." by your hand.)
*/

例えば早送り/巻き戻しボタンでは、これに少し手を加えて、戻る・進むボタンがある場合はその前後に、なければツールバーの最後に早送り・巻き戻しのボタンを挿入するようにしています。

――どうやらボタンを勝手に追加するような挙動は非推奨だそうです。なので、これをやる場合はMozilla Foundationの中の人に睨まれる覚悟が必要ですね。