How to open popover with keyboard shortcut? [duplicate]

为君一笑 提交于 2019-12-21 20:17:07

问题


Possible Duplicate:
Keyboard shortcuts with jQuery

I want to display a popover window using a shortcut key instead of clicking the icon on the toolbar. Do you have any good idea? Thank you for your help.


回答1:


Abody97's answer tells you how to determine if a certain key combo has been pressed. If you're not sure how to get that key combo to show the popover, this is what you need. Unfortunately, Safari makes this needlessly complicated.

In the global script, you'll need a function like the following to show a popover, given its ID and the ID of the toolbar item that should show it:

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

You'll also need code to call this function in your global script's message listener, like the following (this sample does not assume you already have a message listener in place):

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

Finally, in your injected script, the function that listens for the key combo needs to call dispatchMessage, as below:

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

(Stick that in place of showPopUp() in Abody97's code sample.)

Note: If you only have one toolbar item and one popover (and never plan to add more), then it becomes much simpler. Assuming you've already assigned the popover to the toolbar item in Extension Builder, you can just use

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

in place of the call to showPopover in the global message listener, and omit the message value in the call to dispatchMessage in the injected script.




回答2:


Assuming your shortcut is Ctrl + H for instance, this should do:

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
});

Here's a reference for JavaScript keyCodes: little link.

Here's a little demo: little link. (It uses Ctrl + M to avoid browser-hotkey conflicts).




回答3:


I believe this could help you: http://api.jquery.com/keypress/

In the following example, you check if "return/enter" is pressed (which has the number 13).

$("#whatever").keypress(function(event) {
   if( event.which == 13 ) {
   alert("Return key was pressed!");
   }   
});


来源:https://stackoverflow.com/questions/12497414/how-to-open-popover-with-keyboard-shortcut

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!