Gra*_*ble 6 firefox firefox-addon firefox-addon-webextensions
自Firefox Australis界面以来,没有更多的工具栏按钮可以一键切换书签和历史记录侧栏。有“显示侧栏”工具栏按钮,但它显示动画弹出窗口,需要单击2次。
因此,我试图创建一个WebExtension来实现这些按钮。
sidebar_action
没有添加工具栏按钮,因此它排除了此方法。browser_action
。我尝试了很多事情,但没有成功,例如:
SidebarUI.toggle("viewBookmarksSidebar");
background.js脚本,但未定义SidebarUI对象。chrome://browser/content/bookmarks/bookmarksPanel.xul
URL,但是我没有侧边栏可将其加载到其中。sidebar_action
,browser_action
但这是不可能的。browserAction
使用按钮打开您自己的侧边栏您可以有一个browserAction
工具栏按钮来打开您自己的侧边栏。您可以通过在 manifest.json 中定义 asidebar_action
和 a来完成此操作。browser_action
当提出这个问题时,不可能在 manifest.json 中同时组合 asidebar_action
和 a 。browser_action
我不确定什么时候真正改变了,但截至目前(在 FF71 上测试),你可以两者兼得。
以下是执行此操作的示例代码:
清单.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
}
}
Run Code Online (Sandbox Code Playgroud)
背景.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();
});
Run Code Online (Sandbox Code Playgroud)
侧边栏.html
<html>
<body>
<div>Example text</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我尝试实现一个实际切换侧边栏的按钮的简单实现:
背景.js
browser.browserAction.onClicked.addListener(() => {
browser.sidebarAction.isOpen({}).then((isOpen) => {
if (isOpen) {
browser.sidebarAction.close();
} else {
browser.sidebarAction.open();
}
});
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这失败并出现错误:
Run Code Online (Sandbox Code Playgroud)Error: sidebarAction.open may only be called from a user input handler
您可以利用在后台上下文中运行的扩展程序中显示 HTML 的侧边栏这一事实,只需browserAction.onClicked
在侧边栏中添加一个额外的侦听器来关闭侧边栏即可。
背景.js
Error: sidebarAction.open may only be called from a user input handler
Run Code Online (Sandbox Code Playgroud)
侧边栏.js
browser.browserAction.onClicked.addListener(() => {
browser.sidebarAction.open();
});
Run Code Online (Sandbox Code Playgroud)
侧边栏.html
browser.browserAction.onClicked.addListener(() => {
browser.sidebarAction.close();
});
Run Code Online (Sandbox Code Playgroud)
事件侦听器按照添加的顺序执行,因此 sidebar.js 添加的(关闭侧边栏的)事件侦听器在 background.js(打开侧边栏的)事件侦听器之后运行。因此,当侧边栏打开时,它会在单击 browserAction 按钮时关闭。
您特别想要的,打开实际的书签或历史记录侧边栏,是 WebExtensions 无法实现的。您可以做的是自己实现类似的侧边栏。
我尝试将侧边栏 URL 更改为以下chrome://
URL:
browser.sidebarAction.setPanel({panel: 'chrome://browser/content/aboutDialog.xul'});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会导致错误:
Run Code Online (Sandbox Code Playgroud)Error: Access denied for URL chrome://browser/content/aboutDialog.xul
如果您希望通过某种方式以编程方式打开实际的书签或历史侧边栏,那么您将需要提交请求该功能的错误。或者,您还可以创建一个WebExtension Experiment,在安装 WebExtension Experiment 时将功能添加到 WebExtensions API。WebExtension Experiments 不会自动集成到 Firefox 中,但有可能集成。
从 Firefox 73 开始,您可以简单地使用:
\n\nbrowser.browserAction.onClicked.addListener(() => {\n browser.sidebarAction.toggle();\n});\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n如果您需要支持较旧的 Firefox 版本,尤其是 ESR,您可以跟踪打开的侧边栏。这是我为我的插件之一开发的方法,也是我所知道的唯一可以在多个窗口上正常工作的方法。
\n\n在您的后台脚本中:
\n\nlet openedSidebarWindows = {};\nbrowser.runtime.onConnect.addListener(port => onConnect(port));\nbrowser.browserAction.onClicked.addListener(tab => this.onClick(tab));\n\nfunction onConnect(port) {\n const windowId = parseInt(port.name);\n openedSidebarWindows[windowId] = port;\n port.onDisconnect.addListener(port => {\n delete openedSidebarWindows[parseInt(port.name)];\n });\n}\n\nfunction onClick({ windowId }) {\n if (openedSidebarWindows[windowId] !== undefined) {\n browser.sidebarAction.close();\n } else {\n browser.sidebarAction.open();\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n在你的侧边栏脚本中:
\n\nbrowser.runtime.connect({ name: windowId.toString() });\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
715 次 |
最近记录: |