gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:56:45 26 4
gpt4 key购买 nike

由于 Firefox Australis 界面,没有更多的工具栏按钮可以一键切换书签和历史侧边栏。有“显示侧边栏”工具栏按钮,但它会显示一个动画弹出窗口,需要单击 2 次。

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

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

  • 我尝试了很多事情,但没有成功,例如:
  • 调用SidebarUI.toggle("viewBookmarksSidebar");在 background.js 脚本中,但没有定义 SidebarUI 对象。
  • chrome://browser/content/bookmarks/bookmarksPanel.xul URL,但我缺少加载它的侧边栏。
  • 我试图结合sidebar_actionbrowser_action但这是不可能的。
  • 最佳答案

    使用 browserAction 打开您自己的侧边栏按钮

    你可以有一个browserAction工具栏按钮,可打开您自己的侧边栏。您可以通过同时定义 sidebar_action 来做到这一点。和 browser_action在你的 manifest.json 中。

    当被问到这个问题时,不可能将两个 sidebar_action 结合起来。和 browser_action在 manifest.json 中。我不确定这实际上是什么时候改变的,但截至目前(在 FF71 上测试),你可以两者兼得。

    以下是执行此操作的示例代码:

    list .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
    }
    }

    背景.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();
    });

    边栏.html

    <html>
    <body>
    <div>Example text</div>
    </body>
    </html>

    切换侧边栏打开/关闭

    我尝试实现实际上切换侧边栏的按钮的简单实现:

    背景.js

    browser.browserAction.onClicked.addListener(() => {
    browser.sidebarAction.isOpen({}).then((isOpen) => {
    if (isOpen) {
    browser.sidebarAction.close();
    } else {
    browser.sidebarAction.open();
    }
    });
    });

    不幸的是,这失败并出现错误:

    Error: sidebarAction.open may only be called from a user input handler


    使用第二个 browserAction onClicked

    您可以利用在您的扩展中显示 HTML 的侧边栏在后台上下文中运行这一事实,只需添加一个额外的 browserAction.onClicked侧边栏中的监听器关闭侧边栏。

    背景.js

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

    侧边栏.js

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

    边栏.html

    <html>
    <head>
    <script src="sidebar.js"></script>
    </head>
    <body>
    <div>Example text</div>
    </body>
    </html>

    事件监听器按照它们添加的顺序执行,所以 sidebar.js 添加的关闭侧边栏的监听器在 background.js 中打开侧边栏的监听器之后运行。因此,当侧边栏打开时,它会在单击 browserAction 按钮时关闭。

    无法打开实际的书签或历史侧边栏

    WebExtensions 无法实现您特别想要的,即打开实际的书签或历史侧边栏。你可以做的是自己实现类似的侧边栏。

    我确实尝试将侧边栏 URL 更改为 chrome://网址:
    browser.sidebarAction.setPanel({panel: 'chrome://browser/content/aboutDialog.xul'});

    不幸的是,这会导致错误:

    Error: Access denied for URL chrome://browser/content/aboutDialog.xul


    如果您希望以某种方式以编程方式打开实际的书签或历史侧边栏,那么您将需要 file a bug请求功能。或者,您也可以创建一个 WebExtension Experiment它在安装 WebExtension Experiment 时将功能添加到 WebExtensions API。 WebExtension Experiments 不会自动集成到 Firefox 中,但有可能。

    关于javascript - 用于切换侧边栏的 Firefox WebExtension 工具栏按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44741462/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com