8

Chrome のメソッドchrome.browserAction.setBadgeTextは、拡張機能アイコンの上にテキストをオーバーレイします。未読メールの総数を表示したい場合などに便利です。

Firefox Addon SDK拡張機能を開発する際に同等の方法はありますか、または実行時にアイコンを変更する最良の方法は何ですか?

SDK のバージョン 1.11 の時点で、Firefox アドオン SDK API で同様のメソッドを見つけることができません。

4

4 に答える 4

3

いいえ、アドオン SDK には直接同等のものはありません。ただし、おそらく使用しているwidgetモジュールは、アイコンだけでなく、任意の HTML コンテンツを表示できます。また、必要に応じてテキストを表示するなど、その HTML コンテンツをスクリプト化することもできます。私は次のようにしてみましたlib/main.js

var {data} = require("self");

var icon = require("widget").Widget({
  id: "my-widget",
  label: "My Widget",
  contentURL: data.url("icon.html"),
  contentScriptFile: data.url("icon.js"),
  onClick: function()
  {
    icon.port.emit("setBadgeText", "123");
  }
});

icon.htmlファイルを使用してアイコンを表示し、アイコンsetBadgeTextの上のテキストを変更する必要があるたびに、添付されたコンテンツ スクリプトにメッセージを送信します。data/icon.htmlテストしたファイルは次のとおりです。

<html>
  <head>
    <meta charset="utf-8">
    <style type="text/css">
      #badgeText
      {
        position: absolute;
        bottom: 0px;
        right: 0px;
        font: 8px Sans-Serif;
        color: #FFFFFF;
        background-color: #C00000;
        border: 1px solid #800000;
      }
    </style>
  </head>
  <body>
    <img src="http://www.mozilla.org/favicon.ico">
    <div id="badgeText" hidden="true"></div>
  </body>
</html>

テキストが Chrome のバッジ テキストのように見えるようにするためにあまり労力を費やしていません。おそらくスタイルを改善できます。テキストはデフォルトで非表示になっています (簡単にするためにHTML5hidden属性を使用しました)。また、data/icon.jsコンテンツ スクリプトもそれほど複雑ではありません。

self.port.on("setBadgeText", function(text)
{
  var element = document.getElementById("badgeText");
  element.textContent = text;
  element.hidden = (text == null);
});

メッセージを受信し、それsetBadgeTextに応じて HTML ドキュメントにテキストを設定します。また、バッジ テキストとしてbadgeText受け取った場合は要素を非表示にします。null

于 2012-12-07T13:06:01.883 に答える