可能重复:
使用 jQuery 的键盘快捷键
我想使用快捷键而不是单击工具栏上的图标来显示弹出窗口。你有什么好主意吗?谢谢您的帮助。
可能重复:
使用 jQuery 的键盘快捷键
我想使用快捷键而不是单击工具栏上的图标来显示弹出窗口。你有什么好主意吗?谢谢您的帮助。
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
假设您的快捷方式是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来避免浏览器热键冲突)。
我相信这可以帮助你:http ://api.jquery.com/keypress/
在以下示例中,您检查是否按下了“return/enter”(编号为 13)。
$("#whatever").keypress(function(event) {
if( event.which == 13 ) {
alert("Return key was pressed!");
}
});