Gmailの場合、たとえば、Ctrl + Bを押すと、ブラウザー(通常はブックマークマネージャーなど)に渡される代わりに、書式設定の目的でハイジャックされます。 comoposingの途中でメッセージurの太字の書式設定。 と同じです。 + Ctrl + uです。javascriptでキーコンボをハイジャックする方法は?
これはどのように行われますか?
Gmailの場合、たとえば、Ctrl + Bを押すと、ブラウザー(通常はブックマークマネージャーなど)に渡される代わりに、書式設定の目的でハイジャックされます。 comoposingの途中でメッセージurの太字の書式設定。 と同じです。 + Ctrl + uです。javascriptでキーコンボをハイジャックする方法は?
これはどのように行われますか?
は、ハンドラ関数を発射するonkeydown
またはonkeyup
イベントを使用します。それに
var body = document.getElementsByTagName("body")[0];
body.onkeydown = function(event) {
var str = "";
for (var prop in event) {
str += prop + ": " + event[prop] + "<br>";
}
body.innerHTML = str;
};
をあなたはイベントオブジェクトが持っているもののプロパティを見ることができます。
あなたはグローバルdocument
オブジェクトにonkeydown
またはonkeyup
イベントハンドラを添付します。
window.onload = function()
{
document.onkeydown = function(event)
{
var keyCode;
if (window.event) // IE/Safari/Chrome/Firefox(?)
{
keyCode = event.keyCode;
}
else if (event.which) // Netscape/Firefox/Opera
{
keyCode = event.which;
}
var keyChar = String.fromCharCode(keyCode).toLowerCase();
if (keyChar == "m" && event.ctrlKey)
{
document.title = "asdf";
return false; // To prevent normal minimizing command
}
};
};
W3Schoolsのは、これらの使用に関するより多くの情報を持っている:私は「ASDF」のCtrl-Mを押すたびにタイトルバーの変更を作りたかった場合、私はこのように、window.onload
を通じてイベントハンドラを登録しますイベント:onkeydown
およびonkeyup
。
はまた、私は(のような、例えば、Firefoxでは、あなたは、IEでそれはevent.keyCode
だが、event.which
を通じてキーコードにアクセスすることになっている私は、イベントプロパティに関しては、ブラウザ間でいくつかの相違があることに注意すべきだと思いますFirefoxはevent.keycode
-confusingをサポートしているかもしれませんが?)。そのため、私はPrototypeやjQueryのようなJavaScriptフレームワークを使ってこのようなことをすることをお勧めします。
例を挙げてください。 (meta-(:P))の場合、CTRL + Mのキーコンボが使用されたときに、文書のタイトルをテキスト 'asdf'に変更する方法を示します。ありがとう、非常に感謝します。 –
@asdf:確かに、私はあなたの答えを広げました。それが役に立てば幸い。 – hbw
@htw:ありがとう、ありがとうございました:) 今、あなたはnetscape/firefox/opera/coverを持っています。そのコードはsafari/chromeのアカウントですか? –
ここでは、jQueryを使用し、htw's solutionが行うHTMLページのソースです。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Hijack Example</title>
<script type="text/javascript" src="../scripts/jquery-1.2.1.js">
</script>
<script type="text/javascript">
$(function(){
document.title = "before keypress detected";
$(document).keydown(function(event) {
// alert('stuff happened: ' + msg + " " + event.keyCode);
var keyChar = String.fromCharCode(event.keyCode).toLowerCase();
if (keyChar == "m" && event.ctrlKey) {
document.title = "ctrl-m pressed!";
}
});
});
</script>
</head>
<body id="body">
<p>Change the path to jquery above as needed (search for ../scripts/jquery-1.2.1.js)</p>
<p>Watch the title bar, then press control-M, then watch the title bar again!</p>
</body>
</html>
これが誰かを助けてくれることを願っています!
私の答えはこれをしないでください...しかし、私はそれがあなたが探しているものだとは思わない。 –
ええ、そうではありません:) 実際に、私がやっていることはおそらくあなたが思っていたほど悪くはありません:私はローカルでgreasemonkeyスクリプト用に使用するつもりでした。 –
誰でもバージョン1を元に戻せますか? – dmeister