0

ウィンドウ上部のアドレスバーの下に従来のIEスタイルのツールバーが必要な顧客向けのツールバーを開発しています。

これは私が持っているものです: 私が持っているものhttp://www.hellometro.com/toolbar/now.png

ステータスバーの垂直方向の制限のため、文字を読みやすくするためにすべて大文字で書く必要がありますが、収まるほど小さいことに注意してください。(ステータスバー、テキストフィールド、検索ボタンの左端の2つの要素)

これが私が必要としているものです:私が必要としているもの http://www.hellometro.com/toolbar/whatiwant.png

テキストフィールドとボタン内の読みやすいテキストに十分な垂直方向のスペースがある上部に追加されたツールバーに注目してください。(左上のブラウザの戻るボタンの下)。

検索コンポーネントをステータスバーにデフォルトの場所として配置し、ユーザーがオプションページでその位置を変更して、上または下を選択できるようにする方法を探しています(ほとんどのFirefoxユーザーではないにしても多くのユーザーがアドオンを移動できることを知っています)。

私の質問は次のとおりです。FirefoxアドオンSDKは私がやりたいことをサポートしていますか、それとも言語を切り替えて別の角度からソリューションにアプローチする必要がありますか?

4

2 に答える 2

5

これは、利用可能なアドオン SDK API を使用してできることではありません。正当な理由があります。アドオンは画面の領域を不必要に浪費してはならず、ツールバーを追加するだけです。低レベルのモジュールを使用し、ブラウザーの XUL に直接アクセスすることで、この目標を達成できます。このようなものは動作するはずです (テストされていないコードと非常にハック):

var widgetID = "foobar";
var buttonID = "widget:" + require("self").id + "-" + widgetID;
var toolbarName = "My Extension Toolbar";
require("widget").Widget({
  id: widgetID,
  ...
});

if (firstRun)
{
  var winUtils = require("window-utils");
  for (var window in winUtils.browserWindowIterator())
  {
    var toolbox = window.gNavToolbox;
    if (toolbox)
    {
      // Does the button exist already?
      var button = toolbox.ownerDocument.getElementById(buttonID);
      if (button && button.parentNode.getAttribute("toolbarname") == toolbarName)
        continue;  // Button already in the right toolbar
      else if (button)
      {
        // Remove button from its current location
        var toolbar = button.parentNode;
        toolbar.removeChild(button);

        // Make sure this change is persisted
        toolbar.setAttribute("currentset", toolbar.currentSet);
        toolbar.ownerDocument.persist(toolbar.id, "currentset");
      }

      var toolbar = toolbox.appendCustomToolbar("My Extension Toolbar", buttonID);
      toolbar.currentSet = toolbar.getAttribute("currentset");
      toolbar.ownerDocument.persist(toolbar.id, "currentset");

      // Send change notification, the widget needs reinitializing
      var event = toolbox.ownerDocument.createEvent("Events");
      event.initEvent("customizationchange", true, true);
      toolbox.dispatchEvent(event);
    }
  }
}

未定義のfirstRun変数に注意してください - これを一度だけ実行したい場合は、ウィジェットを別の場所に移動するというユーザーの選択を元に戻します (simple-prefsモジュールなどを介してフラグを保存できます)。buttonIDまた、計算には SDK 内のファイルの内部詳細が使用されることに注意してaddon-kit/lib/widget.jsください。ツールバー ボタン ID の計算方法は、将来の SDK バージョンで変更される可能性がありますが、SDK で作成したウィジェットを取得するには、これが唯一の方法だと思います。もちろん、コードの他の部分にも多くの内部構造があります。

ドキュメント: window-utilsmodule (browserWindowIteratorドキュメント化されていません), <xul:toolbox>, <xul:toolbar>.

于 2012-04-18T12:41:20.563 に答える