Chrome のメソッドchrome.browserAction.setBadgeText
は、拡張機能アイコンの上にテキストをオーバーレイします。未読メールの総数を表示したい場合などに便利です。
Firefox Addon SDK拡張機能を開発する際に同等の方法はありますか、または実行時にアイコンを変更する最良の方法は何ですか?
SDK のバージョン 1.11 の時点で、Firefox アドオン SDK API で同様のメソッドを見つけることができません。
Chrome のメソッドchrome.browserAction.setBadgeText
は、拡張機能アイコンの上にテキストをオーバーレイします。未読メールの総数を表示したい場合などに便利です。
Firefox Addon SDK拡張機能を開発する際に同等の方法はありますか、または実行時にアイコンを変更する最良の方法は何ですか?
SDK のバージョン 1.11 の時点で、Firefox アドオン SDK API で同様のメソッドを見つけることができません。
いいえ、アドオン 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