KeyLogger
by
unarist
2021-06-16 [2021/06/16 22:29:28]
Simple Key Logger (w/o modifiers, composition)
@@ -12,16 +12,19 @@
return;
}
let events = ['timestamp (Asia/Tokyo)\tkey\tcode\tkeyCode\ttarget'];
+ const dtFormat = new Intl.DateTimeFormat('ja-JP', { timeZone: 'Asia/Tokyo', hour12: false, year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' });
const listener = e => {
if (e.isComposing || e.repeat || ['Control','Shift','Alt','Meta'].includes(e.key)) return;
- const ts = new Date().toLocaleString('ja-JP', { timeZone: 'Asia/Tokyo', hour12: false, year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' });
+ const ts = dtFormat.format(new Date());
const shortStr = [e.ctrlKey && 'Ctrl', e.shiftKey && 'Shift', e.altKey && 'Alt', e.metaKey && 'Meta', e.key].filter(x => x).join('+');
events.push([ts, shortStr, e.code, e.keyCode, e.target.localName].join('\t'));
};
window.addEventListener('keydown', listener, { capture: true });
window.__KeyLogger_finish = () => {
window.removeEventListener('keydown', listener, { capture: true });
- const resultdoc = window.open().document;
+ // dataURIにしてnoopenerにしてもいいな
+ const resultdoc = window.open('about:blank', '_blank').document;
+ resultdoc.title = `キー操作の記録 - ${dtFormat.format(new Date())}`;
resultdoc.body.appendChild(Object.assign(resultdoc.createElement('textarea'), {
readOnly: true,
style: 'position: fixed; width: 100%; height: 100%; top: 0; left: 0;',
/*
* @title KeyLogger
* @description Simple Key Logger (w/o modifiers, composition)
* @include http://*
* @license MIT License
* @javascript_url
*/
(() => {
if (window.__KeyLogger_finish) {
window.__KeyLogger_finish();
return;
}
let events = ['timestamp (Asia/Tokyo)\tkey\tcode\tkeyCode\ttarget'];
const dtFormat = new Intl.DateTimeFormat('ja-JP', { timeZone: 'Asia/Tokyo', hour12: false, year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit' });
const listener = e => {
if (e.isComposing || e.repeat || ['Control','Shift','Alt','Meta'].includes(e.key)) return;
const ts = dtFormat.format(new Date());
const shortStr = [e.ctrlKey && 'Ctrl', e.shiftKey && 'Shift', e.altKey && 'Alt', e.metaKey && 'Meta', e.key].filter(x => x).join('+');
events.push([ts, shortStr, e.code, e.keyCode, e.target.localName].join('\t'));
};
window.addEventListener('keydown', listener, { capture: true });
window.__KeyLogger_finish = () => {
window.removeEventListener('keydown', listener, { capture: true });
// dataURIにしてnoopenerにしてもいいな
const resultdoc = window.open('about:blank', '_blank').document;
resultdoc.title = `キー操作の記録 - ${dtFormat.format(new Date())}`;
resultdoc.body.appendChild(Object.assign(resultdoc.createElement('textarea'), {
readOnly: true,
style: 'position: fixed; width: 100%; height: 100%; top: 0; left: 0;',
textContent: `---- 押されたキー ----\n${events.join('\n')}\n---- 環境情報 ----\nURL: ${location.href}\n環境: ${navigator.userAgent}`
}));
delete window.__KeyLogger_finish;
};
alert('このページで押されたキーの記録を開始しました。記録結果を表示するにはもう一度このブックマークレットを実行してください。');
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。