사이트가 키보드 단축키를 무시하지 못하도록 차단하면(예:Permissions.default.shortcuts = 2) Firefox에서 삭제 버튼(del 버튼)이 깨집니다.

사이트가 키보드 단축키를 무시하지 못하도록 차단하면(예:Permissions.default.shortcuts = 2) Firefox에서 삭제 버튼(del 버튼)이 깨집니다.

permissions.default.shortcuts의 기본값은 0웹페이지가 키보드 단축키에 대한 Firefox의 일반적인 반응을 무시하도록 허용합니다. 예를 들어 Ctrl-R을 누르면 일반적으로 페이지가 다시 로드되지만, 을 누르면 permissions.default.shortcuts = 0Outlook Web Access는 대신 Ctrl-R을 "이 메시지에 회신"으로 해석합니다.

이 기본값을 그대로 두면 URL 및 검색 창과 웹 페이지의 텍스트 입력 필드 모두에서 Backspace및 버튼이 예상대로 작동합니다. 텍스트 커서 왼쪽에 있는 문자를 삭제하고 텍스트 커서 오른쪽에 있는 문자를 삭제합니다. 텍스트 커서.DeleteBackspaceDelete

설정은 permissions.default.shortcuts = 2사이트에서 키보드 단축키를 무시하지 못하도록 차단하므로 (예를 들어 Ctrl-R은 해당 페이지에 관계없이 현재 페이지를 일관되게 다시 로드합니다.) (이 작업은 사이트별로 수행할 수도 있습니다.) 그러나 이상한 부작용도 있습니다. DeleteURL 및 검색 창에서 버튼을 사용할 때는 계속 작동하지만 텍스트 입력 필드에서는 아무 작업도 수행하지 않습니다. 충돌이나 비정상적인 동작이 없습니다. 텍스트는 변경되지 않고 그대로 유지됩니다.

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텍스트 입력 필드, 웹 사이트에서 작동하지 않음) 사이의 가능한 연결처럼 보입니다.

또한 이 버그를 관찰하기 위해 사이트에서 실제로 무엇이든 무시하려고 할 필요가 없다는 것도 확인했습니다. 다음 HTML이면 충분합니다( Delete이면 예상대로 작동 permissions.default.shortcuts = 0하고 이면 아무것도 하지 않아도 됩니다 permissions.default.shortcuts = 2).

<!DOCTYPE html>
<html>
<body>

Text box: <input type="text">

</body>
</html>

이 동작은 수많은 실제 웹사이트에서도 일관되게 발생하며(Stack Exchange, Google 및 우리 대학의 Outlook Web App 이메일 페이지를 확인했습니다), 이러한 동작이 발생하지 않는 웹사이트는 본 적이 없습니다. 노트북 내장 키보드의 삭제 버튼을 사용하든, 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

if permissions.default.shortcuts = 0(즉, Delete예상대로 작동하는 경우), 그러나

keyup    keyCode=46  (.)   which=46  (.)
         key=Delete

if permissions.default.shortcuts = 2(즉, Delete텍스트 입력 필드에서 아무 작업도 수행하지 않는 경우). 즉, keyup은 있지만 keydown은 없습니다. (이상하네요.)

그래서 내 중심 질문은 다음과 같습니다.웹사이트가 실제로 무언가를 수행하는 실제 Firefox 키보드 단축키를 중단하지 않고 무시하지 못하게 하려면 어떻게 해야 합니까 Delete?

내 시스템에 대한 몇 가지 기술적인 세부 사항(유용하다면 더 많은 정보를 제공할 수 있지만, 다른 두 대(라이브러리) 컴퓨터에서 비슷한(또는 더 나쁜) 결과를 얻었다는 사실을 보면 이것이 아마도 시스템이나 하드웨어에 특정한 것이 아닐 수도 있음을 알 수 있습니다): 저는 Ubuntu(18.04.1), Dell Precision 5540 노트북(i7-9750H)에서 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 및 이전 버전에서 어떻게 Backspacealso(그리고 extra-)가 깨졌나요?: 누르면 어떻게 되나요?Backspace 없이텍스트 입력 필드에 초점을 맞추는 것은 에 의해 제어됩니다 browser.backspace_action. 0(Windows의 기본값)은 "이전 페이지로 이동", 1"위로 스크롤" 및 2"아무 작업도 수행하지 않음"을 나타냅니다.

그러나 66.0.2 또는 66.0.3 이전 버전의 Firefox에서는(어느 것인지 잘 모르겠습니다) 설정을 사용하면 텍스트 입력 필드에 초점이 맞춰져 있는지 여부에 관계없이 동일하게 동작합니다 permissions.default.shortcuts = 2.Backspace

따라서 browser.backspace_action를 로 설정 하면 2누르기가 Backspace그대로 작동 Delete하지만 더 이상 작동하지 않습니다. browser.backspace_action로 설정 하면 1약간 더 나빠집니다. 페이지가 예기치 않게 표시되지만 다른 일은 발생하지 않습니다. 그러나 0이것이 (다시 Windows 기본값입니다!) 로 설정되어 있으면 Backspace텍스트 입력 상자에 초점을 맞춘 상태에서도 을 누르면 페이지를 떠나 이전 페이지로 돌아갑니다!

Backspace( 처음에는 Windows 및 Firefox 66.0.1을 실행하는 (대학 도서관) 컴퓨터에서 관찰했지만 MacOS 및 Firefox 66.0.3을 실행하는 (대학 도서관) 컴퓨터에서는 관찰하지 않았기 때문에 처음에는 문제가 Windows에만 국한된 것이라고 믿었습니다 . Linux 및 Firefox 77.0.1을 실행하는 컴퓨터) 그러나 두 가지 마이너 버전의 차이점은 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, 유사한 문제가 존재했으며 BackspaceFirefox 66의 일부 하위 버전에서 수정되었습니다. 따라서 제가 관찰한 "Windows 전용" 문제는 실제로 운영 체제에 국한된 것이 아니라 Firefox 버전의 결과입니다. 우리 대학 도서관의 Windows 컴퓨터(66.0.1)는 Mac 버전(66.0.3)보다 약간 뒤지고, 내 Linux 컴퓨터(71.0.1) 버전보다 훨씬 뒤떨어져 있습니다.

Bugzilla에 새로운 버그를 제출했습니다.https://bugzilla.mozilla.org/show_bug.cgi?id=1604970, 위의 패치로. 따라서 이 질문에 대한 대답은 곧 "Firefox 업그레이드"가 될 것입니다.

하지만 그런 일이 발생하더라도 나는 이 질문(및 답변)을 남겨 두어 이전 버전의 Firefox를 사용하는 사람 중 우연히 발견한 사람이 도움을 받을 수 있도록 할 계획입니다. 이는 상대적으로 간단하지만(CPU 시간이 많이 소요됨) 불쾌한 문제에 대한 직관적이지 않은 솔루션이기 때문입니다.

관련 정보