4

可能重复:
使用 jQuery 的键盘快捷键

我想使用快捷键而不是单击工具栏上的图标来显示弹出窗口。你有什么好主意吗?谢谢您的帮助。

4

3 回答 3

4

Abody97 的回答告诉您如何确定是否按下了某个组合键。如果您不确定如何让该组合键显示弹出框,这就是您所需要的。不幸的是,Safari 使这变得不必要的复杂。

在全局脚本中,你需要一个类似下面的函数来显示一个弹出框,给定它的 ID 和应该显示它的工具栏项的 ID:

function showPopover(toolbarItemId, popoverId) {
    var toolbarItem = safari.extension.toolbarItems.filter(function (button) {
        return button.identifier == toolbarItemId && button.browserWindow == safari.application.activeBrowserWindow;
    })[0];
    var popover = safari.extension.popovers.filter(function (popover) {
        return popover.identifier == popoverId;
    })[0];
    toolbarItem.popover = popover;
    toolbarItem.showPopover();  
}

您还需要在全局脚本的消息侦听器中调用此函数的代码,如下所示(此示例不假定您已经有一个消息侦听器):

safari.application.addEventListener('message', function (e) {
    if (e.name == 'Show Popover') {
        showPopover(e.message.toolbarItemId, e.message.popoverId);
    }
}, false);

最后,在你注入的脚本中,监听组合键的函数需要调用dispatchMessage,如下:

safari.self.tab.dispatchMessage('Show Popover', {
    toolbarItemId : 'my_pretty_toolbar_item',
    popoverId     : 'my_pretty_popover'
});

(把它放在showPopUp()Abody97 的代码示例中。)

注意:如果您只有一个工具栏项和一个弹出框(并且从不打算添加更多),那么它会变得更加简单。假设您已经将弹出框分配给 Extension Builder 中的工具栏项,您可以使用

safari.extension.toolbarItems[0].showPopover();

代替全局消息侦听器中的调用,并在注入脚本showPopover的调用中省略消息值。dispatchMessage

于 2012-09-19T20:55:41.023 回答
3

假设您的快捷方式是Ctrl + H例如,这应该这样做:

var ctrlDown = false;
$(document).keydown(function(e) {
    if(e.keyCode == 17) ctrlDown = true;
}).keyup(function(e) {
    if(e.keyCode == 17) ctrlDown = false;
});
$(document).keydown(function(e) {
    if(ctrlDown && e.keyCode == 72) showPopUp(); //72 is for h
});

这是 JavaScript keyCodes 的参考:little link

这是一个小演示:little link。(它使用Ctrl + M来避免浏览器热键冲突)。

于 2012-09-19T15:12:07.773 回答
0

我相信这可以帮助你:http ://api.jquery.com/keypress/

在以下示例中,您检查是否按下了“return/enter”(编号为 13)。

$("#whatever").keypress(function(event) {
   if( event.which == 13 ) {
   alert("Return key was pressed!");
   }   
});
于 2012-09-19T15:10:46.167 回答