Firefox WebExtension工具栏按钮用于切换侧边栏

时间:2017-06-24 22:21:08

标签: firefox firefox-addon firefox-webextensions

自Firefox Australis界面以来,没有更多工具栏按钮只需单击一下即可切换书签和历史记录侧边栏。有“show sidebars”工具栏按钮,但它会显示一个动画弹出窗口,需要点击2次。

所以我正在尝试创建一个WebExtension来实现这些按钮。

  • 给定的WebExtension只能添加一个工具栏按钮,因此我必须创建两个单独的扩展。这开始很好......但是好的,我会处理它。
  • sidebar_action没有添加工具栏按钮,因此它排除了此方法。
  • 这让我留下browser_action

我做了很多事情但没有成功,例如:

  • 在background.js脚本中调用SidebarUI.toggle("viewBookmarksSidebar");,但没有定义SidebarUI对象。
  • chrome://browser/content/bookmarks/bookmarksPanel.xul网址,但我没有侧边栏来加载它。
  • 我尝试合并sidebar_actionbrowser_action,但这是不可能的。

2 个答案:

答案 0 :(得分:3)

WebExtensions无法满足您的需求。使用附加SDK或其他类型的旧版扩展程序很容易,但是使用WebExtensions无法实现这一点。

如果您希望以某种方式以编程方式打开侧边栏,则需要file a bug请求该功能。您还可以创建WebExtension Experiment,在安装WebExtension实验时将功能添加到WebExtensions API。 WebExtension实验不会自动集成到Firefox中,但它有可能存在。

答案 1 :(得分:3)

Firefox⩾73

从Firefox 73开始,您可以简单地使用:

obj

Documentation on MDN

Firefox <73

如果您需要支持较旧的Firefox版本,尤其是ESR,则可以跟踪打开了哪个侧边栏。这是我为其中一个插件开发的方法,也是我所知道的唯一一种可在多个窗口中正常工作的方法。

在您的后台脚本中:

browser.browserAction.onClicked.addListener(() => {
    browser.sidebarAction.toggle();
});

在侧边栏脚本中:

let openedSidebarWindows = {};
browser.runtime.onConnect.addListener(port => onConnect(port));
browser.browserAction.onClicked.addListener(tab => this.onClick(tab));

function onConnect(port) {
  const windowId = parseInt(port.name);
  openedSidebarWindows[windowId] = port;
  port.onDisconnect.addListener(port => {
    delete openedSidebarWindows[parseInt(port.name)];
  });
}

function onClick({ windowId }) {
  if (openedSidebarWindows[windowId] !== undefined) {
    browser.sidebarAction.close();
  } else {
    browser.sidebarAction.open();
  }
}