由于火狐澳洲版界面,没有更多的工具栏按钮来切换书签和历史侧边栏只需一次点击。有“显示侧边栏”工具栏按钮,但它显示一个动画弹出,需要2点击。
因此,我试图创建一个WebExtension来实现这些按钮。
sidebar_action不添加工具栏按钮,因此它排除了此方法。browser_action在一起了。我尝试了很多事情,但都没有成功,例如:
SidebarUI.toggle("viewBookmarksSidebar");脚本中调用background.js,但是没有定义SidebarUI对象。chrome://browser/content/bookmarks/bookmarksPanel.xul URL,但是我缺少加载它的侧边栏。sidebar_action和browser_action结合起来,但这是不可能的。发布于 2017-06-25 03:23:28
使用browserAction按钮打开自己的侧边栏
您可以有一个browserAction工具栏按钮来打开您自己的侧边栏。您可以通过在您的sidebar_action中定义一个browser_action和一个browser_action来实现这一点。
当提出这个问题时,不可能将sidebar_action和browser_action合并到manifest.json中。我不确定这种情况何时真正改变了,但到目前为止(在FF71上进行了测试),您可以两者兼得。
下面是执行此操作的示例代码:
manifest.json:
{
"manifest_version": 2,
"name": "Button opens sidebar",
"description": "Open the sidebar with a toolbar button.",
"version": "1.0",
"browser_action": {
"default_icon": "icon.png",
"default_title": "Open Sidebar"
},
"background": {
"scripts":[
"background.js"
]
},
"sidebar_action": {
"default_icon": "icon.png",
"default_title": "Example Sidebar",
"default_panel": "sidebar.html",
"open_at_install": false
}
}background.js:
//The manifest.json entry must be a file in your extension, but you can change it to
// an external site in your background.js:
browser.sidebarAction.setPanel({panel: 'https://example.org/'});
//Open the sidebar when the browserAction button is clicked.
browser.browserAction.onClicked.addListener(() => {
browser.sidebarAction.open();
});sidebar.html
<html>
<body>
<div>Example text</div>
</body>
</html>将侧边栏打开/关闭
我尝试实现按钮的简单实现,实际上是切换侧栏:
background.js
browser.browserAction.onClicked.addListener(() => {
browser.sidebarAction.isOpen({}).then((isOpen) => {
if (isOpen) {
browser.sidebarAction.close();
} else {
browser.sidebarAction.open();
}
});
});不幸的是,这个错误失败了:
错误:只能从用户输入处理程序调用sidebarAction.open。
使用第二个browserAction onClicked
您可以利用从扩展中显示HTML的侧边栏在后台上下文中运行的事实,只需在侧边栏中添加一个额外的browserAction.onClicked侦听器就可以关闭侧边栏。
background.js
browser.browserAction.onClicked.addListener(() => {
browser.sidebarAction.open();
});sidebar.js
browser.browserAction.onClicked.addListener(() => {
browser.sidebarAction.close();
});sidebar.html
<html>
<head>
<script src="sidebar.js"></script>
</head>
<body>
<div>Example text</div>
</body>
</html>事件侦听器按照添加的顺序执行,因此由sidebar.js添加的事件侦听器(关闭侧栏)在background.js中的事件监听器之后运行,后者打开侧栏。因此,当侧边栏打开时,它会在被单击的browserAction按钮上关闭。
无法打开实际书签或历史记录侧边栏
您特别想要的是打开实际的书签或历史侧边栏,这在WebExtensions中是不可能的。您可以做的是自己实现类似的侧边栏。
我确实尝试将侧栏URL更改为chrome:// URL:
browser.sidebarAction.setPanel({panel: 'chrome://browser/content/aboutDialog.xul'});不幸的是,这会导致一个错误:
错误:拒绝访问URL chrome://browser/content/chrome Dialog.xul
如果您希望以某种方式以编程方式打开实际的书签或历史侧边栏,那么您将需要提出一个错误请求该功能。另外,您还可以创建一个WebExtension实验,它在安装WebExtensions实验时向WebExtension API添加功能。WebExtension实验不会自动集成到火狐中,但有可能会集成到火狐中。
发布于 2020-03-22 23:06:56
火狐⩾73
从Firefox 73开始,您可以简单地使用:
browser.browserAction.onClicked.addListener(() => {
browser.sidebarAction.toggle();
});Firefox < 73
如果您需要支持旧版本的Firefox,特别是ESR,您可以跟踪哪些侧边栏是打开的。这是我为我的一个加载项开发的方法,也是我知道的唯一一个在多个窗口中正确工作的方法。
在您的背景脚本中:
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();
}
}在您的侧边栏脚本中:
browser.runtime.connect({ name: windowId.toString() });https://stackoverflow.com/questions/44741462
复制相似问题