Firefox에서 웹 사이트의 키보드 단축키 도용을 금지하는 방법


57

많은 웹 사이트, 특히 리치 텍스트 편집 (이 사이트도 유죄 임)과 관련된 모든 웹 사이트는 일반적으로 Firefox를 제어하는 ​​데 사용되는 키보드 단축키를 훔치고 대신 다른 작업을 수행합니다. Cmd-number, Cmd-L, Cmd-T 또는 Cmd-K와 같은 것을 눌렀을 때 완전히 화를 내고 싶지 않습니다. 멈출 수 있습니까?

실제로 모든 Cmd- * 바로 가기를 훔치는 것을 금지 할 수 있다면 아마도 최선일 것입니다. 나는 그들이 유용한 것에 사용 된 것을 본 적이 없다. 가능합니까?


4
동의합니다. FogBugz는 키보드 단축키를 매우 잘 구현했습니다. CTRL-;바로 가기 모드로 들어가고 사용 가능한 바로 가기를 사용하여 화면에 표시되는 모든 명령을 강조 표시합니다. 모든 단축키는 콤보이므로 새로운 경우는 CTRL-; N이고 편집은 CTRL-; E입니다. 익숙해지기 쉽고 충돌이 없습니다. 사용자가 더 쉽고 브라우저 바로 가기를 재정의하지 않기 때문에 더 많은 사이트가 이와 같은 것을 사용하기를 바랍니다. 너무 나쁜 수퍼 유저는 FogBugz와 같은 사람들이 있기 때문에이 작업을 수행하지 않습니다.
Sam


1
이것은 Bugzilla의이 기능 요청에서 논의됩니다 .
기계 달팽이

어떻게 든 cmd + N을 엉망으로 만드는 많은 인트라넷 페이지를 방문하므로 키보드에서 새 브라우저 창을 열 수 없습니다! 너무 짜증나!
Nicolas Miari

1
~ 12 년 후, Mozilla는 이에 대한 상당히 합리적인 수정을 안정화했습니다. 숨겨져 있고 불완전하지만 건강을 구할 수 있습니다. 여기 내 답변을 참조하십시오 : superuser.com/a/1317514/158390
Lambart

답변:


24

Greasemonkey의 새로운 @run-at속성 덕분에 이제 가능합니다!

난에서 영감을했다 이 스크립트이 스크립트를 성공적으로 키보드 단축키 가로채는 Userscript로 결합하는 Ctrl+ TCtrl+를 S. Firefox 17 ESR 및 Firefox 25에서 테스트했습니다.

// ==UserScript==
// @name           Disable Ctrl+s and Ctrl+t interceptions
// @description    Stop websites from highjacking keyboard shortcuts
//
// @run-at         document-start
// @include        *
// @grant          none
// ==/UserScript==

// Keycode for 's' and 't'. Add more to disable other ctrl+X interceptions
keycodes = [83, 84];  

(window.opera ? document.body : document).addEventListener('keydown', function(e) {
    // alert(e.keyCode ); //uncomment to find more keyCodes
    if (keycodes.indexOf(e.keyCode) != -1 && e.ctrlKey) {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    // alert("Gotcha!"); //ucomment to check if it's seeing the combo
    }
    return false;
}, !window.opera);

1
이것은 매우 도움이되었습니다. OS X 사용자는 스왑 아웃한다 e.ctrlKey위해 e.cmdKeye.cmdKey && e.shiftKey브라우저 바로 가기의 대부분을 회수 할 수 있습니다.
JamesGecko

이 스크립트 9는 키 코드 배열 에 추가 하여 CTRL + TAB을 수정하도록 작동합니다 . 감사!
Mike Mueller

@JamesGecko 답변을 통해 명령 키에 e.metaKey를 사용해야한다는 것을 알았습니다.
riezebosch

3
이 코드는 작동합니다! Ctrl + 키뿐만 아니라 Ctrl + Alt + 키, Ctrl + Shift + 키 및 Ctrl + Alt + Shift + 키도 필터링합니다. Ctrl 수정 자의 상태 만 검사하기 때문입니다.
RomanSt

첫 번째 질문 : Firefox에서 작동하는 것으로 유명한 스크립트의 경우 브라우저가 Opera인지 확인하는 이유는 무엇입니까? 두 번째 질문 : 주석에는 's'와 't'에 대한 문자 코드가 있지만 코드는 실제로 'S'와 'T'에 대한 것입니다. 어떤 이유로 대문자 코드를 지정해야합니까? 감사.
Douglas가

8

버그가 제기 된 지 11 년 만에 Mozilla는이 인기있는 기능 요청에 대해 작업을 시작했으며 현재는 잘 작동하는 것 같습니다 (Firefox 66.0.3 / Ubuntu에서 테스트).

(FF 59 이후 설정을 찾기가 훨씬 어려워 졌다는 점을 지적한 @PerJohansson에게 감사합니다.)

다음 단계에 따라 사이트 바로 가기를 비활성화 할 수 있습니다.

  1. (i)위치 표시 줄에서 아이콘을 클릭하십시오
  2. >"연결"상태 항목의 오른쪽에 있는 작은 화살표 ( )를 클릭하십시오 .
  3. 이제 More Information하단에 표시됩니다. 그것을 클릭하면 Page Info대화 상자가 나타납니다.
  4. 마지막으로 Permissions탭 으로 이동 하여 Override Keyboard Shortcuts설정을 조정하십시오 .

각 단계에 대한 최근 (2019 년 5 월) 스크린 샷은 다음과 같습니다.

Firefox 사이트 정보 대화 상자 스크린 샷

Firefox 사이트 보안 대화 상자 스크린 샷

Firefox 권한 탭 스크린 샷

이 수정 사항의 히스토리에 관심이있는 경우 관련 Mozilla 티켓은 다음과 같습니다. https://bugzilla.mozilla.org/show_bug.cgi?id=380637https://bugzilla.mozilla.org/show_bug.cgi ? id = 1445942


2
Firefox 64에서 (어디에 있는지 확실하지 않은 경우)이 연결 상자에 액세스하려면 "연결"=> "추가 정보"를 클릭해야합니다. 권한 톱니 바퀴가 대신 환경 설정으로 이동합니다.
당 요한슨

@PerJohansson에게 감사합니다. 티켓을 업데이트했습니다.
Lambart

about:config기본값을 변경 하는 옵션 은 무엇입니까 ? 나는 강제로 할 모든 내 키보드에 후크 할 수 없습니다하는 사이트
inetknght

5

광범위한 연구 결과에 따르면 Firefox (3.6.x)의 현재 버전에서는 불가능합니다. 모든 주요 바인딩 충돌은 우선 순위로 해결됩니다 : 시스템> 웹 사이트> Firefox-다소 어리석은 순서입니다. 내가 시도한 애드온 중 아무것도 고칠 수없는 것 같습니다.

향후 버전에서는 가능할 수 있지만 지금은 대답이 불가능합니다.


1
거의 4 년 후에 FF 30.0을 사용하면 여전히 문제가됩니다. 나는 Martin의 Greasemonkey 아이디어를 시도 할 것입니다.
LGT

2
거의 8 년 후 FF 53.0을 사용하면 여전히 문제가됩니다.
Daniel

5

문제는 키 누르기를 훔치는 JavaScript 키보드 이벤트 인 것 같으므로 이러한 모든 키보드 이벤트 를 바인딩 해제 하여 브라우저에 각 단축키의 올바른 사용법을 리턴 하는 JavaScript 스크립트 (Greasemonkey를 통해 사용)를 빌드 할 수 없습니까?

이것이 가능한지 확실하지 않지만 JavaScript / Greasemonkey 경험이 더 많은 사람이 도울 수 있습니다 (SOA를 요청할 가치가 있음).


2
이것은 onKeyPress 메커니즘을 통해 작동합니다. Firefox는 먼저 모든 키 누르기를 웹 사이트로 전송하고, 취소되거나 가로 채지 않은 경우에만 해당 키 누르기를 확인합니다. 웹 사이트 전에 키 누르기를 가로 채고 파이어 폭스 기능을 직접 실행하는 Greasemonkey 마술이 가능할 수도 있지만 분명하지는 않습니다.
16:54에

4

문제는 모든 페이지에서 키 누르기 이벤트를 잡기 위해 이벤트 핸들러를 설정하는 Javascript를 실행할 수 있으며 Firefox의 Javascript 컨트롤은 다른 Javascript 기능을 손상시키지 않고 중지하기에 충분하지 않습니다.

이를 방지하는 유일한 방법은 Javascript를 비활성화하는 것입니다 (도구-> 옵션, [컨텐츠] 탭, JavaScript 활성화 선택을 취소하십시오 ). 또는 NoScript와 같은 확장명을 사용하여 사이트별로 Javascript를 비활성화 할 수 있습니다.

Firefox를 사용하면 창 이동 / 크기 조정, 상황에 맞는 메뉴 변경 또는 비활성화 등과 같은 특정 Javascript 사용을 방지 할 수 있습니다 . 그러나 웹 사이트가 키보드 이벤트를 가로채는 것을 막을 방법은 없습니다.

어쩌면이 수준의 제어를 제공하는 확장 기능이있을 수 있습니다.
없다 자바 스크립트 옵션이 있지만 확장은 더 이상 업데이트되고있다.


2
Javascript 옵션과 내가 시도한 다른 확장은 이것을 지원하지 않습니다. 모든 자바 스크립트를 차단하면 웹을 거의 사용할 수 없게되는데 이는 실제로 옵션이 아닙니다.
TAW

0

타사 플러그인이 기본 브라우저 창에서 초점을 맞추고있을 수 있습니다. 이 경우 키보드 입력 (인터럽트 제외)은 플러그인에 의해 차단됩니다. 이 기능이 마음에 들지 않으면 항상 문제가있는 플러그인을 제거 할 수 있습니다.


3
플래시도 마찬가지이지만 일반 자바 스크립트는 단축키를 훔칠 수 있습니다. 여기서 새 질문을 시작하고 질문 텍스트 창에서 Cmd-L (Mac 이외의 경우 Ctrl-L)을 누릅니다. URL 표시 줄로 이동하는 대신 바로 가기가 도난 당하고 삽입 하이퍼 링크 대화 상자가 표시됩니다. 예전에는 드물었지만 최근에 너무 많은 웹 사이트에서 시작했습니다.
TAW

방금 Firefox를 실행하는 Windows 7에서 시도했지만 정상적으로 작동하는 것처럼 주소 표시 줄로 직접 이동했습니다.
Daisetsu

죄송합니다. 확실하지 않습니다. 리치 텍스트 상자 대화 상자를 선택한 경우에만 발생합니다. 네가 했니? Firefox, Opera, Safari 및 Chrome을 사용하여 OSX에서 테스트했습니다. 일반적으로 Cmd-L은 모두 URL 막대로 이동합니다 (Ctrl-L은 아무것도 수행하지 않음). 질문 본문을 편집 할 때 Cmd-L과 Ctrl-L은 대신 하이퍼 링크 삽입 대화 상자를 표시합니다.
TAW

당신이 옳은 것 같습니다. 나는 이것을 막는 방법을 모른다. :( 이제 흥미로운 질문이므로 질문을 찬성합니다. 아무도 대답하지 않으면 현상금을 지급합니다.
Daisetsu

플러그인 문제가 아닙니다. 플러그인은 그 자체로 별도의 문제입니다. 그리고 다른 문제가 있습니다. 플러그인에서는 별도의 엔티티이기 때문에 플러그인에 의해 모든 초점이 도용됩니다. JavaScript를 사용하는 firefox UI는 JavaScript이며 자체 바인딩이 있지만 사이트는 동일한 레벨의 바인딩을 정의 할 수 있습니다. 지금까지 이를 방지 할 메커니즘 은 아직 없습니다.
njsg

0

다양한 브라우저에서 많은 테스트를 수행 한 후이 "앱 통합 키"중 일부는 "키 누르기"이벤트를 가로 채기가 어렵 기 때문에 키를 눌렀을 때 키를 가로 채기가 더 쉽습니다.

크로스 브라우저와 호환되는이 스크립트를 생각해 냈습니다 (Microsoft의 IE를 테스트하지 않았습니다). 브라우저는 일부 키에 대해 다른 코드를 반환합니다. 내 경우에는 Ctrl + P를 방지하고 싶었습니다.

크롬의 키 "P" e.keyCode == 80e.charCode == 16, 오페라에서는, 파이어 폭스에서는e.charCode == 112

$(document).on('keydown', function(e) {
    if(e.ctrlKey && (e.key == "p" || e.charCode == 16 || e.charCode == 112 || e.keyCode == 80) ){
        alert("Please use the Print PDF button below for a better rendering on the document");
        e.cancelBubble = true;
        e.preventDefault();

        e.stopImmediatePropagation();
    }  
});

jQuery를 사용했습니다.


0

당신이 원하는 경우 비활성화 어떤 인수 CTRL 키 존재 웹 페이지에 의해을, 단지 (이전에 접수 및 작업 대답에 건물) AZ에서 모든 문자의 코드를 필터링

// ==UserScript==
// @name           Disable Ctrl+key interceptions
// @description    Stop websites from highjacking keyboard shortcuts
//
// @run-at         document-start
// @include        *
// @grant          none
// ==/UserScript==

(window.opera ? document.body : document).addEventListener('keydown', function(e) {
    //alert(e.keyCode ); //uncomment to find more keyCodes
    if( e.ctrlKey && e.keyCode>=65 && e.keyCode<=90 ) {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    }
    return false;
}, !window.opera);

-1

아마도 그 프로그램 중 하나 인 Autohotkey 또는 Autoit을 사용할 수 있으며 핫키 콤보를 수행하고 파이어 폭스 기능에 연결할 수 있다면

Ctrl-; T 새 탭으로

Ctrl-; N 새 창에.

Autohotkey 또는 Autoit을 사용하는 방법을 모르므로 다른 사람이 이것이 작동하는지 확인해야하며 잠재적 인 아이디어로만 제공합니다.


-2

Firefox 최신 버전에서는 "자바 메뉴를 가로 채기 위해 자바 스크립트를 비활성화"할 수 있습니다.

도구 / 옵션 / 콘텐츠 / Javascript 고급 활성화 / 컨텍스트 메뉴 비활성화 또는 교체

그러나 "자바 단축키를 가로 채기 위해 자바 스크립트를 비활성화"하는 기능은 없습니다.

추신. 트위터 웹 사이트가 싫습니다. 키보드 단축키는 시스템 기반 키보드 단축키 J, K, L, I와 충돌합니다.

bugzilla.mozilla.org에서 기능 요청을했습니다. https://bugzilla.mozilla.org/show_bug.cgi?id=775002

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.