まず第一に、⌘+をショートカットとして使用することを必ずしもお勧めすることはできません。これは、Safariですでに何かを意味しているためです(つまり、ページをズームします)。誰かがそれがまだ正常に機能することを望むかもしれません。構築しているものによっては、それが理にかなっている場合もありますが、確信が持てない限り、デフォルトのショートカットをオーバーライドしないでください。
とにかく:キーイベントはトリッキーです。多くの場合、keyCode / charCode / whichプロパティが常に正しい文字と一致するとは限らないためString.fromCharCode
、適切な文字列が常に取得されるとは限りません。keyIdentifier
見た方が良い場合もありますが、常にそうとは限りません(たとえば、文字キーのコードは常に大文字です)。
私が過去に行ったこと(これが最善の方法かどうかはわかりませんが、問題なく機能します)は、代わりにキーダウンイベントとキーアップイベントをリッスンし、修飾キーを「スタック」することです。つまり、キーが押されたときはいつでも、それが修飾キーであるかどうかを確認します(つまり、cmd、ctrl、alt、またはshiftであるかどうか)。そうである場合は、それを修飾子の「スタック」に追加します。キーアップで反対のことをします。リリースされたキーが修飾子であった場合は、スタックから削除します。
ここで、keydown-handlerに戻って、キーが修飾子キーではなかった場合、keydownイベント(keypressイベントとは異なり、keyIdentifier
チェックするための非常に信頼性の高いプロパティがあります)と修飾子のスタックを送信できます。他のコールバック、それはそこからそれを取ります。
あなたの場合、そのようなコールバックは、cmd-keyがスタックにあり、keydownイベントのkeyIdentifierが "U + 002B"(のUnicodeコード+
)であることを確認します。
私が話していることのjsfiddleの例をまとめました。[結果]ペインをクリックして(フォーカスが合っていることを確認するため)、⌘+を押すと、使用したキーコンボが表示され、「成功!」と入力されます。下。それ以外の場合は、キーの組み合わせが表示されます。私のキーボードでは、プラス記号に直接アクセスできるので、表示されるキーの組み合わせは「⌘+」だけです。ただし、プラス記号を入力するためにシフトする必要がある場合は、「⇧⌘+」が表示されます。
これは、Safari / Macでキーボードショートカットを処理するのに適した一般化されたコードであるため、必要に応じてその上に構築できます。ブラーイベントなどのモディファイヤスタックをリセットするには、いくつかのイベントリスナーを追加する必要があります。理想的には、キーを離すとモディファイアスタックが自動的にリセットされますが、何かが原因でブラウザまたは監視対象の要素/ウィンドウ/ドキュメントがフォーカスを失う可能性があるため、キーアップイベントは処理されず、解放されたキーが勝ちますスタックから削除されません。したがって、ブラーイベントを確認してください。