%E3%80%81Firefox%20%E3%81%A7%E5%89%8A%E9%99%A4%E3%83%9C%E3%82%BF%E3%83%B3%20(del%20%E3%83%9C%E3%82%BF%E3%83%B3)%20%E3%81%8C%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%AA%E3%81%8F%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82.png)
の既定値は でpermissions.default.shortcuts
、0
これにより、Web ページは Firefox のキーボード ショートカットに対する通常の応答を上書きできます。たとえば、Ctrl + R は通常ページを再読み込みしますが、 の場合permissions.default.shortcuts = 0
、Outlook Web Access は Ctrl + R を「このメッセージに返信」として解釈します。
このデフォルトをそのままにしておくと、URL バーと検索バー、および Web ページのテキスト入力フィールドの両方で、ボタンBackspace
とボタンが期待どおりに機能します。つまり、テキスト カーソルの左側の文字を削除し、テキスト カーソルの右側の文字を削除します。Delete
Backspace
Delete
この設定permissions.default.shortcuts = 2
により、サイトがキーボード ショートカットを上書きすることがブロックされ、たとえば Ctrl + R を押すと、そのページが何であるかに関係なく、常に現在のページが再読み込みされます。(これはサイトごとに行うこともできます。) ただし、奇妙な副作用もあります。ボタンはDelete
URL バーや検索バーで使用すると引き続き機能しますが、テキスト入力フィールドで使用すると何も機能しません。クラッシュや異常な動作は発生せず、テキストは変更されないままになります。
Firefox 66.0.3 以降では、Backspace
引き続き正常に機能します。対照的に、Firefox 66.0.1 以前では、Backspace
さらにひどい不具合が発生していますDelete
(詳細は最後に記載)。
注: 承認された回答には現在 (部分的な) 解決策が含まれていますが、この質問の残りの部分は主に、何が問題で、どのように修正すればよいかを他の人に理解してもらうために私が提供した情報です。したがって、あなた自身がこの問題を経験していて解決策を必要としているためにこの質問を読んでいる場合は、ここから受け入れられた回答までスキップできます。問題が解決しない場合、または興味がある場合にのみ、質問の残りの部分を読んでください。
関連ありそうなもの: Mozilla のキーボードショートカットのリスト (https://support.mozilla.org/en-US/kb/keyboard-shortcuts-perform-firefox-tasks-quickly) の「編集」セクションには、次のエントリが含まれます。
Command Shortcut
Delete Del
Backspace
通常のテキスト入力(特に、ない編集セクションで「ショートカット」としてリストされている)も、サイトがそれを「上書き」できないようにすると何も起こらないのではなく、何かDel
削除されています。ただし、 /をDelete
キーボード ショートカットとしてリストすることは、原因 (サイトがキーボード ショートカットを上書きできない) と結果 ( Delete
Web サイトのテキスト入力フィールドで機能しない) の間にリンクがある可能性があるようです。
また、このバグを確認するために、サイトが実際に何かをオーバーライドしようとする必要はないことも確認しました。次の HTML で十分です ( のDelete
場合は期待どおりに動作しpermissions.default.shortcuts = 0
、 の場合は何も起こりませんpermissions.default.shortcuts = 2
)。
<!DOCTYPE html>
<html>
<body>
Text box: <input type="text">
</body>
</html>
この動作は、実際の多数の Web サイト (Stack Exchange、Google、大学の Outlook Web App メール ページなど) でも一貫しており、発生しない Web サイトは確認していません。ノートパソコンの内蔵キーボードの削除ボタンを使用しても、USB キーボードの削除ボタンを使用しても、この動作が発生します。
最後に、Javascript Key Event Tester (で次の結果を確認しました。https://unixpapa.com/js/testkey.html) (何も抑制されず、すべての属性値が表示され、入力前にテキスト入力ボックスにフォーカスが当てられます):
Backspace
次のようになります:
keydown keyCode=8 which=8 charCode=0
shiftKey=false ctrlKey=false altKey=false metaKey=false
key=Backspace char=undefined location=0 repeat=false
keyIdentifier=undefined keyLocation=undefinedkeyup keyCode=8 which=8 charCode=0
shiftKey=false ctrlKey=false altKey=false metaKey=false
key=Backspace char=undefined location=0 repeat=false
keyIdentifier=undefined keyLocation=undefined
の値に関係なくpermissions.default.shortcuts
(またはbrowser.backspace_action
、以下の細則を読んでいる人にとっては )、結合された行を分割し (おそらく、バックスペースがキャリッジリターンに適用されているため)、これらすべてのテストで同じであることが判明した属性を省略すると、次のようになります。
keydown keyCode=8 which=8
key=Backspace
keyup keyCode=8 which=8
key=Backspace
対照的に、押すDelete
と
keydown keyCode=46 (.) which=46 (.)
key=Delete
keyup keyCode=46 (.) which=46 (.)
key=Delete
(つまりpermissions.default.shortcuts = 0
、Delete
期待通りに動作する場合)ただし、
keyup keyCode=46 (.) which=46 (.)
key=Delete
if permissions.default.shortcuts = 2
(つまり、Delete
テキスト入力フィールドで何もしないとき)。つまり、keyup は存在しますが、keydown がありません。(これは奇妙です。)
そこで、私の中心的な質問は次のとおりです。実際に何かを実行する Firefox のキーボード ショートカットを、Web サイトが上書きしないようにするにはどうすればよいでしょうかDelete
。
私のシステムに関する技術的な詳細をいくつか紹介します (役立つ場合はさらに情報を提供できますが、他の 2 台の (図書館の) コンピューターで同様の (またはより悪い) 結果が得られたという事実から、これはシステムまたはハードウェア固有のものではないと考えられます)。私は、Dell Precision 5540 ラップトップ (i7-9750H) の Ubuntu (18.04.1) で Firefox 71.0 (64 ビット) を使用しています。外付けキーボードは Microsoft Natural Ergonomic Keyboard 4000 で、特別なソフトウェアをインストールしたり、キーを再マッピングしたりしていません。
cat /etc/default/keyboard
与える
# KEYBOARD CONFIGURATION FILE
# Consult the keyboard(5) manual page.
XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""
BACKSPACE="guess"
66.0.1以前では、どのようBackspace
に(さらに)壊れているのか: 押すと何が起こるかBackspace
それなしテキスト入力フィールドのフォーカスは によって制御されますbrowser.backspace_action
。0
(Windows のデフォルト) は「前のページに移動する」を示し、 は1
「上にスクロールする」を示し、2
は「何もしない」を示します。
ただし、Firefox 66.0.2 または 66.0.3 より前のバージョン (どちらかわかりません) では、設定により、テキスト入力フィールドにフォーカスがあるかどうかに関係なく、同じ動作にpermissions.default.shortcuts = 2
なります。Backspace
したがって、browser.backspace_action
が に設定されている場合2
、 を押すと現状Backspace
と同様に機能しDelete
なくなりますが、それ以上は機能しなくなります。browser.backspace_action
が に設定されている場合1
、機能はわずかに低下するだけです。ページが予期せず前にジャンプしますが、それ以外は何も起こりません。 ただし、 が に設定されている場合0
(これも Windows のデフォルトです)、Backspace
テキスト入力ボックスにフォーカスがあっても、 を押すとページを離れて前のページに戻ります。
(当初私は、このBackspace
問題は Windows 特有のものだと考えていました。なぜなら、Windows と Firefox 66.0.1 を実行している (大学図書館の) コンピュータではこの問題が見られましたが、MacOS と Firefox 66.0.3 を実行している (大学図書館の) コンピュータでは (Linux と Firefox 77.0.1 を実行している私自身のコンピュータでも) 問題は見られなかったからです。しかし、その 2 つのマイナー バージョンの違いは、 に適用されるバグを修正するために Mozilla の誰かがコードにパッチを適用したもののBackspace
、 に (より軽微に) 適用されるバグを修正する作業を怠ったことに起因していることが判明しましたDelete
。)
答え1
当面の解決策は、パッチを適用した後、ソースから Firefox をビルドすることです (現在の安定リリース 71.0.1 の場合、行番号とハッシュの違いを除けば、多くのバージョン (少なくとも 66.0.x まで、おそらくそれ以降) でも同じであるはずです)。
diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc
index c90f3aa340..ffd8727350 100644
--- a/browser/base/content/browser-sets.inc
+++ b/browser/base/content/browser-sets.inc
@@ -180,7 +180,7 @@
<key id="key_paste"
key="&pasteCmd.key;"
modifiers="accel"/>
- <key id="key_delete" keycode="VK_DELETE" command="cmd_delete"/>
+ <key id="key_delete" keycode="VK_DELETE" command="cmd_delete" reserved="false"/>
<key id="key_selectAll" key="&selectAllCmd.key;" modifiers="accel"/>
<key keycode="VK_BACK" command="cmd_handleBackspace" reserved="false"/>
を話さない人のために説明するとdiff
、これは次のことを意味します。ファイルを変更してbrowser/base/content/browser-sets.inc
次の行を置き換えた後、
<key id="key_delete" keycode="VK_DELETE" command="cmd_delete"/>
と
<key id="key_delete" keycode="VK_DELETE" command="cmd_delete" reserved="false"/>
示されているようにhttps://bugzilla.mozilla.org/show_bug.cgi?id=1445942にも同様の問題が発生していましたBackspace
が、Firefox 66 のサブバージョンで修正されました。したがって、私が観察した「Windows のみ」の問題は、実際にはオペレーティング システム固有のものではなく、私の大学図書館の Windows マシンにインストールされている Firefox のバージョン (66.0.1) が、Mac のバージョン (66.0.3) よりもわずかに古く、私の Linux コンピューターのバージョン (71.0.1) よりもかなり古くなっていることが原因です。
Bugzillaに新しいバグを報告しました。https://bugzilla.mozilla.org/show_bug.cgi?id=1604970、上記のパッチを適用してください。したがって、この質問に対する答えは、すぐに「Firefox をアップグレードしてください」となるでしょう。
しかし、たとえそうなったとしても、私はこの質問 (と回答) を残しておき、古いバージョンの Firefox を使い続けていて偶然この質問に遭遇した人が役に立つようにするつもりです。これは、厄介な問題に対する比較的単純な (ただし CPU 時間は消費する) が、直感的とは言えない解決策だからです。