ツールバー ボタンで構成される Firefox 拡張機能を作成しました。拡張機能をインストールすると、メイン ツールバーにボタンが自動的に表示されるように設定するにはどうすればよいですか。ユーザーがツールバーのカスタマイズ メニューに移動してボタンをドラッグする必要がないようにしたい。
4 に答える
https://developer.mozilla.org/En/Code_snippets:Toolbar#Adding_button_by_defaultから-
拡張機能を作成して展開し、[カスタマイズ]ツールバーパレットをオーバーレイしてそのツールバーボタンを含めると、デフォルトでは使用できなくなります。ユーザーはそれをツールバーにドラッグする必要があります。次のコードは、デフォルトでツールバーにボタンを配置します。これは、インストール後のアドオンの最初の実行時にのみ実行する必要があります。これにより、ユーザーがボタンを削除することを決定した場合でも、アプリケーションを起動するたびにボタンが再び表示されることはありません。
ノート
デフォルトでは、最初の実行時、または拡張機能の更新によって新しいボタンが追加されたときに、ボタンを1回だけ挿入します。
ボタンがユーザーに真の価値をもたらし、拡張機能への頻繁なエントリポイントになる場合にのみ、デフォルトでボタンを追加してください。
次の要素の間にツールバーボタンを挿入しないでください:結合された戻る/進むボタン、ロケーションバー、停止ボタン、またはリロードボタン。これらの要素は、隣り合わせに配置すると特別な動作をし、別の要素によって分離されると壊れます。
/**
* Installs the toolbar button with the given ID into the given
* toolbar, if it is not already present in the document.
*
* @param {string} toolbarId The ID of the toolbar to install to.
* @param {string} id The ID of the button to install.
* @param {string} afterId The ID of the element to insert after. @optional
*/
function installButton(toolbarId, id, afterId) {
if (!document.getElementById(id)) {
var toolbar = document.getElementById(toolbarId);
// If no afterId is given, then append the item to the toolbar
var before = null;
if (afterId) {
let elem = document.getElementById(afterId);
if (elem && elem.parentNode == toolbar)
before = elem.nextElementSibling;
}
toolbar.insertItem(id, before);
toolbar.setAttribute("currentset", toolbar.currentSet);
document.persist(toolbar.id, "currentset");
if (toolbarId == "addon-bar")
toolbar.collapsed = false;
}
}
if (firstRun) {
installButton("nav-bar", "my-extension-navbar-button");
// The "addon-bar" is available since Firefox 4
installButton("addon-bar", "my-extension-addon-bar-button");
}
次のコードを使用しています....
function init() {
// ....
var navbar = document.getElementById("nav-bar");
if ((myExtensionShared.checkMyBtnInstalled() == false) &&
(navbar != null && document.getElementById("myExtension-button") == null)) {
var newset;
if (navbar.getAttribute('currentset') &&
navbar.getAttribute('currentset').indexOf('myExtension-button') == -1) {
navbar.insertItem ('myExtension-button', null, null, false);
newset = navbar.getAttribute('currentset') + ',myExtension-button';
navbar.setAttribute('currentset', newset);
document.persist('nav-bar', 'currentset');
}
else if (!navbar.getAttribute('currentset')) {
navbar.insertItem ('myExtension-button', null, null, false);
newset=navbar.getAttribute('defaultset') + ',myExtension-button';
navbar.setAttribute('currentset', newset);
document.persist('nav-bar', 'currentset');
}
}
// ....
}
myExtensionShared.prototype.checkMyBtnInstalled = function() {
var prefs = Components.classes["@mozilla.org/preferences-service;1"]
.getService(Components.interfaces.nsIPrefBranch);
var btnInstalled = false;
if (prefs.prefHasUserValue("extensions.myExtension.myBtnInstalled")) {
btnInstalled = prefs.getBoolPref("extensions.myExtension.myBtnInstalled");
}
if (!btnInstalled) {
prefs.setBoolPref("extensions.myExtension.myBtnInstalled", true);
}
return btnInstalled;
}
以下は、拡張機能の初回実行時に Firefox ツールバーにボタンを追加する、私が書いた小さなスクリプト スニペットです: Add your extension's toolbar button to Firefox at first run
ボタンを追加する次のコードを使用しています (バーの別の場所に既に存在する場合)。
//...
appendButtonInToolbar:function(buttonId, toolbarId) {
var toolbar = document.getElementById(toolbarId);
var button = document.getElementById(buttonId);
if(button) {
var parentBar = button.parentNode;
if(parentBar && parentBar != toolbar) {
var newset = this.removeButtonFromToolbarCurrentSet(parentBar,buttonId);
}
toolbar.appendChild(button);
}else{
toolbar.insertItem(buttonId);
}
this.appendButtonInToolbarCurrentSet(toolbar,buttonId);
},
appendButtonInToolbarCurrentSet:function(toolbar, buttonId) {
var oldset = toolbar.getAttribute("currentset");
var newset = "";
if(oldset && oldset!="") {
newset = oldset + ",";
}
newset += buttonId;
toolbar.setAttribute("currentset", newset);
document.persist(toolbar.id,"currentset");
return newset;
},
removeButtonFromToolbarCurrentSet:function(toolbar, buttonId) {
var oldset = toolbar.getAttribute("currentset");
if(!oldset || oldset=="" || oldset.indexOf(buttonId) == -1) return oldset;
var reg = new RegExp(buttonId+",?", "gi");
var newset = oldset.replace(reg,"");
if (newset.charAt(newset.length-1) == ",") {
newset = newset.substring(0, newset.length - 1);
}
toolbar.setAttribute("currentset", newset);
document.persist(toolbar.id,"currentset");
return newset;
},
//...