OperaでGmailのキーボードショートカットからメールを削除できない件
ちょっと気になったので調べてみた。
まずはおさらい。
- 表題のとおり、Opera だと Gmail のキーボードショートカットからメールを削除できない。
- メール削除のショートカットは # である。
- 1年ぐらい前に、Opera だけの隠し Gmail ショートカットとして、End キーを押すとメールを削除できるというのがあった。自分の日記でも紹介している。
次に、Gmailを開くときに、Opera のエラーコンソールを見つめてみると、こういうのが確認できる。
JavaScript User Javascript thread Opera has modified the JavaScript on mail.google.com (GMail deletes messages on End key presses GMail: browser blocking prevents chat feature from appear...). See browser.js for details
強調したところ注目。browser.js が何やらやっているらしい。
さらにここで、Opera のキーコードを見てみる。
# のキーコード (keypress) が 35
End のキーコード (keypress) が 35
つまりそういうことでした。
browser.js を開いて、"mail.google" と検索。
// 244011, GMail deletes messages on End key presses opera.addEventListener( 'BeforeEventListener.keypress', function(e){ preventDefault.call=call; if(e.event.keyCode==35){ preventDefault.call(e); } }, false );
こういう部分が見つかる。
キーコードが 35 の時は preventDefault しちゃうと。(!)
こんなことよりもっと根本的な解決があるだろうに…
他のブラウザもだけど、別のキーが同じキーコードを吐くような状態を何故放っておくのだろうか。
で、browser.js を編集したら良いかなと思ったのだけど、browser.js って自分で編集すると動いてくれない? Opera が勝手に無効と判断するのだろうか?
有効・無効の確認テストでも無効と言ってくる。
UserJS を書こうにも、無名関数なので removeEventListener できないという。
createEvent しても keypress キーコードが 35 だったらpreventDefault されてしまうんだよね (未確認だけどたぶんそう)。
バグレポート送るしかないかー。
UserJS 作ったとしても、https な Gmail だったら一々確認されてしまうという手間があるので、やっぱ browser.js で直してくれるのがよいと思う。うん。
一応別の方法で修正 (?) してみた。修正でも何でもないけど。
// ==UserScript== // @name Gmail delete shortcut // @author edvakf // @namespace http://d.hatena.ne.jp // @version 1.1.0 // @include http://mail.google.com/mail/* // ==/UserScript== (function () { window.addEventListener( 'keypress', function(e){ if(e.keyCode==8 && e.ctrlKey){ var button=document.body.getElementsByTagName('button')[5]; /* var buttons=document.getElementsByTagName('button'); for(var i=0;i<buttons.length;i++){ if(buttons[i].innerText=='Delete')break; } var button=buttons[i]; */ if(confirm(button.innerText+'?')){ var evt = document.createEvent('HTMLEvents'); evt.initEvent('click', true, true); button.dispatchEvent(evt); } } }, true ); }) ();
Ctrl+Backspace を押すと Delete ボタンにクリックイベントを投げるということで。
なぜ Ctrl+Backspace かというと、フォーカスが入力欄にあるとかそういう判断をするのが面倒なので、テキスト入力中に押しそうもないキーバインドにした。
やっつけです。あまり使用はおすすめしません。
Gmail Labs に Custom Shortcut というのがあるな。これで Move To Trash を # から別のキーに変えれば削除出来た。