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のコードサンプルの代わりにそれを貼り付けてください。)

注:ツールバー項目が1つとポップオーバーが1つしかない場合(さらに追加する予定がない場合)は、はるかに簡単になります。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のリファレンスは次のとおりです:littlelink

ここに小さなデモがあります:小さなリンク。(ブラウザとホットキーの競合を回避するために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 に答える