How to open popover with keyboard shortcut? [dupli

2019-04-10 17:45发布

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.

3条回答
我命由我不由天
2楼-- · 2019-04-10 17:59

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!");
   }   
});
查看更多
Summer. ? 凉城
3楼-- · 2019-04-10 18:01

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.

查看更多
贼婆χ
4楼-- · 2019-04-10 18:24

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).

查看更多
登录 后发表回答