我正在使用Chrome扩展程序,该扩展程序是外部书签服务的客户端。扩展程序不会同步原生书签:相反,它将拥有自己的UI(有原因)。
因此,可以采取一些措施:添加书签,获取(查询)书签以及管理书签。每个都应该有自己的UI页面。
我认为扩展程序不能有多个popup.html,所以我决定通过在弹出窗口中创建人工标签来解决这个问题,以便用户可以在它们之间切换。但是,当然我还需要为这两个动作设置键盘快捷键:
E.g。 Ctrl + D应打开弹出窗口并激活“添加”选项卡,Ctrl + Shift + D应打开弹出窗口并激活“查询”选项卡。
但到目前为止,我没有那样做。理想情况下,我想用一些参数来调用我的弹出窗口,但似乎这是不可能的。打开弹出窗口只有一个键盘快捷键。
然后我试图想出我是否可以定义一个命令,在后台页面处理它(例如调整一些内部状态),然后打开一个弹出窗口,它将读取内部状态并显示正确的选项卡;然而,事实证明我甚至无法以编程方式显示弹出窗口。我只能使用类似window.open('popup.html');
的内容,但它会在新标签中打开而不是弹出窗口,因此它看起来不太好。
有没有办法做到这一点?
答案 0 :(得分:0)
不幸的是,无法为Chrome扩展程序弹出窗口("_execute_browser_action"
命令)指定多个键盘快捷键,也无法以编程方式打开它。
您也不能再次按相同的键盘快捷键,而弹出窗口对此做出响应,这是我尝试的一种解决方法。如果快捷方式是 alt Q ,您可以想象再次按下该快捷方式以切换弹出窗口中的选项卡。但是在弹出窗口打开时按 alt Q 只会将其关闭。据我所知,该事件根本没有传递给弹出代码(不是在窗口关闭时您有很多时间对其进行响应)。
我发现与该行为有关的唯一半有用的事情是在快速双击弹出窗口的键盘快捷键时执行不同的操作。在我的QuicKey Chrome扩展程序中,按 alt Q 一次可打开弹出窗口,但是快速按两次(500毫秒内)将切换到以前使用的标签。因此,您可以从一种快捷方式中获得两种动作。 (它是通过在弹出窗口打开后立即调用chrome.runtime.connect()
来完成的。后台页面监听chrome.runtime.onConnect
并记下时间。如果它在时限内收到onDisconnect
事件,则会进行切换到上一个标签。)
我能够摆脱Chrome扩展程序弹出窗口行为的另一个原因是,如果代码足够早地添加了事件侦听器,则您的代码将在用户释放修饰键时得到keyup
事件快捷方式。因此,如果他们按 alt Q 打开弹出窗口,则会为 alt 键得到一个keyup
事件。就我而言,这足以提供一些有用的功能:按 alt Q 打开弹出窗口,然后在按住 alt 的同时按< kbd> W (在 Q 的右侧)在选项卡列表中导航,然后释放 alt 切换到选定的选项卡。在Chrome的限制范围内,它与Firefox的 ctrl tab 行为非常接近。