【问题标题】:Multiple keyboard shortcuts for Chrome extension's popupChrome扩展程序弹出窗口的多个键盘快捷键
【发布时间】:2019-06-30 06:55:11
【问题描述】:

我正在开发一个 Chrome 扩展程序,它是外部书签服务的客户端。该扩展程序不同步本机书签:相反,它将有自己的 UI(这是有原因的)。

因此,有一些可能的操作:添加书签、获取(查询)书签和管理书签。每一个都应该有自己的 UI 页面。

我认为一个扩展不能有多个 popup.html,所以我决定通过在我的弹出窗口中创建人工选项卡来解决这个问题,以便用户可以在它们之间切换。但是,当然我还需要至少有以下两个操作的键盘快捷键:

  • 添加书签
  • 查询书签

例如Ctrl+D 应该打开一个“添加”选项卡激活的弹出窗口,Ctrl+Shift+D 应该打开一个“查询”选项卡激活的弹出窗口。

但到目前为止,我没有做到这一点。理想情况下,我希望通过一些参数调用我的弹出窗口,但这似乎是不可能的。打开弹出窗口只有一个键盘快捷键。

然后我想我是否可以定义一个命令,在后台页面中处理它(例如调整一些内部状态),然后打开一个弹出窗口,它将读取内部状态并显示右侧选项卡;但是,事实证明我什至无法以编程方式显示弹出窗口。我只能使用window.open('popup.html'); 之类的东西,但它会在新选项卡而不是弹出窗口中打开它,所以看起来不太好。

那么有没有办法做到这一点?

【问题讨论】:

  • 通过 chrome.windows.create 显示一个真实的popup 窗口。我想不出任何其他选择。
  • 感谢您的评论。 chrome 的扩展 API 不允许这样做真是太荒谬了。与 browser_action 的弹出窗口相比,那些真正的弹出窗口看起来很难看。另一种选择是使用内容脚本并显示像这样的对话框 jqueryui.com/dialog ,但这也很丑陋。这只是一个肮脏的黑客。

标签: google-chrome-extension keyboard-shortcuts


【解决方案1】:

不幸的是,无法为 Chrome 扩展弹出窗口指定多个键盘快捷键("_execute_browser_action" 命令),也无法以编程方式打开它。

您也不能再次按下相同的键盘快捷键并让弹出窗口响应它,这是我尝试过的一种解决方法。如果快捷方式是 altQ,您可以想象再次按下它来切换弹出窗口中的选项卡。但是在弹出窗口打开时按 altQ 只会将其关闭。据我所知,该事件根本没有传递给弹出代码(并不是说您在窗口关闭时有很多时间来响应它)。

我发现与此行为有关的唯一半有用的事情是在快速双击弹出窗口的键盘快捷键时执行不同的操作。在我的QuicKey Chrome 扩展程序中,按 altQ 一次会打开弹出窗口,但快速按两次(在 500 毫秒内)将切换到之前使用的选项卡。因此,您可以从一个快捷方式中获得两个操作。 (它通过在弹出窗口打开后立即调用chrome.runtime.connect() 来执行此操作。后台页面侦听chrome.runtime.onConnect 并记录时间。如果在时间限制内收到onDisconnect 事件,它会切换到上一个选项卡。)

我能够从 Chrome 扩展程序弹出行为中提取的另一个要点是,如果您的代码足够早地添加了一个事件侦听器,那么当用户释放捷径。因此,如果他们按 altQ 打开弹出窗口,您将获得 alt 键的keyup 事件。就我而言,这足以提供一些有用的功能:按 altQ 打开弹出窗口,然后在按住 alt 的同时按 W(就在 Q 旁边)浏览选项卡列表,释放 alt 会切换到选定的选项卡。在 Chrome 的限制下,它与 Firefox 的 ctrltab 行为非常接近。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多