Cách cấm ăn cắp bàn phím tắt của các trang web trong Firefox


57

Nhiều trang web, đặc biệt là tất cả mọi thứ liên quan đến chỉnh sửa văn bản phong phú (trang web này cũng có tội), đánh cắp các phím tắt bàn phím thường được sử dụng để kiểm soát Firefox và thay vào đó chúng làm một việc khác. Nó hoàn toàn gây phẫn nộ khi tôi nhấn một cái gì đó như Cmd-number, Cmd-L, Cmd-T hoặc Cmd-K và nó không làm những gì tôi muốn. Tôi có thể làm cho nó dừng lại?

Trên thực tế, nó có lẽ là tốt nhất nếu tôi có thể cấm ăn cắp tất cả các phím tắt Cmd- *. Tôi chưa bao giờ thấy chúng được sử dụng cho bất cứ điều gì hữu ích. Có thể không?


4
Đồng ý, nó gây phẫn nộ. FogBugz thực hiện rất tốt các phím tắt. CTRL-;vào chế độ phím tắt và tô sáng tất cả các lệnh hiển thị trên màn hình bằng các phím tắt có sẵn. Mỗi phím tắt là một kết hợp, vì vậy trường hợp mới CTRL-; Nvà chỉnh sửa là CTRL-; E. Rất dễ dàng để làm quen và không xung đột. Tôi ước có nhiều trang web sẽ sử dụng cái gì đó như thế này vì nó dễ sử dụng hơn và không ghi đè các phím tắt trình duyệt. Quá tệ, SuperUser không làm điều này vì nó từ cùng một người với FogBugz.
Sam


1
Điều này đang được thảo luận tại yêu cầu tính năng này trên Bugzilla .
Ốc cơ khí

Tôi truy cập rất nhiều trang mạng nội bộ tại nơi làm việc bằng cách nào đó làm rối cmd + N, vì vậy tôi không bao giờ có thể mở các cửa sổ trình duyệt mới từ bàn phím! Rất khó chịu!
Nicolas Miari

1
Sau ~ 12 năm, Mozilla đã ổn định một bản sửa lỗi khá hợp lý cho việc này. Nó được giấu kín và không hoàn hảo, nhưng nó có thể tiết kiệm sự tỉnh táo của bạn. Xin vui lòng xem câu trả lời của tôi ở đây: superuser.com/a/1317514/158390
Lambart

Câu trả lời:


24

Nhờ @run-attài sản mới của Greasemonkey , điều này hiện có thể!

Tôi lấy cảm hứng từ tập lệnh nàytập lệnh này để kết hợp chúng thành một Bản mô tả thành công chặn các phím tắt Ctrl+ TCtrl+ S. Tôi đã thử nghiệm trong Firefox 17 ESR và 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
Điều này rất hữu ích. Người dùng OS X nên trao đổi trên e.ctrlKeycho e.cmdKeye.cmdKey && e.shiftKeyđòi lại hầu hết các phím tắt trình duyệt của họ.
JamesGecko

Kịch bản này hoạt động để tôi sửa CTRL + TAB bằng cách thêm 9vào mảng mã phím. Cảm ơn!
Mike Mueller

@JamesGecko Tìm ra thông qua câu trả lời này, bạn nên / có thể sử dụng e.metaKey cho khóa lệnh.
riezebosch

3
Mã này hoạt động! Hãy nhớ rằng nó không chỉ lọc Ctrl + Key mà còn Ctrl + Alt + Key, Ctrl + Shift + Key và Ctrl + Alt + Shift + Key, vì nó chỉ kiểm tra trạng thái của công cụ sửa đổi Ctrl.
RomanSt

Câu hỏi đầu tiên: để một tập lệnh được cho là hoạt động trên Firefox, tại sao nó kiểm tra xem trình duyệt có phải là Opera không? Và câu hỏi thứ hai: bình luận nói mã ký tự cho 's' và 't', nhưng mã thực sự là 'S' và 'T'. Tôi có cần chỉ định mã chữ hoa cho một số lý do? Cảm ơn.
Douglas Held

8

11 năm sau khi lỗi được đưa ra, cuối cùng Mozilla cũng phải làm việc theo yêu cầu tính năng phổ biến này và dường như nó vẫn hoạt động tốt (đã được thử nghiệm trong Firefox 66.0.3 / Ubuntu).

(Cảm ơn @PerJohansson vì đã chỉ ra rằng họ đã khiến cài đặt khó tìm hơn nhiều kể từ FF 59.)

Bạn có thể tắt các phím tắt trang web bằng cách làm theo các bước sau:

  1. Nhấp vào (i)biểu tượng trong Thanh vị trí
  2. Nhấp vào mũi tên nhỏ ( >) ở bên phải của mục trạng thái "Kết nối".
  3. Bây giờ, bạn nên xem More Informationở phía dưới. Nhấp vào đó và cuối cùng bạn sẽ nhận được Page Infohộp thoại.
  4. Cuối cùng, đi đến Permissionstab và điều chỉnh Override Keyboard Shortcutscài đặt.

Dưới đây là một số ảnh chụp màn hình (tháng 5 năm 2019) gần đây cho mỗi bước:

Ảnh chụp màn hình hộp thoại Firefox Info Info

Ảnh chụp màn hình hộp thoại Firefox Site Security

Ảnh chụp màn hình tab quyền Firefox

Nếu bạn quan tâm đến lịch sử của bản sửa lỗi này, thì đây là các vé Mozilla có liên quan: https://ormszilla.mozilla.org/show_orms.cgi?id=380637https://bugzilla.mozilla.org/show_orms.cgi ? id = 1445942


2
Trong Firefox 64 (không chắc là nó xuất hiện ở đâu), bạn phải Nhấp vào "Kết nối" => "Thông tin thêm" để truy cập vào hộp idalog này. Thay vào đó, các bánh răng quyền đi vào Tùy chọn không phải là vị trí thích hợp.
Per Johansson

Cảm ơn @PerJohansson, tôi đã cập nhật vé.
Lambart

Là gì about:configtùy chọn để thay đổi mặc định? Tôi muốn buộc tất cả các trang web không thể kết nối với bàn phím của mình
inetknght

5

Nghiên cứu mở rộng cho thấy kể từ phiên bản hiện tại của Firefox (3.6.x), điều này là không thể - tất cả các xung đột ràng buộc chính được giải quyết với các ưu tiên: System> Website> Firefox - một thứ tự khá ngu ngốc. Không có addons nào tôi từng thử dường như có thể sửa nó.

Có thể nó có thể trở nên khả thi trong các phiên bản trong tương lai, nhưng ngay bây giờ câu trả lời là - Không thể.


1
Sử dụng FF 30.0 gần 4 năm sau và đây vẫn là một vấn đề. Tôi sẽ thử ý tưởng Greasemonkey của Martin.
LGT

2
Sử dụng FF 53.0 gần 8 năm sau và đây vẫn là một vấn đề.
Daniel

5

Vì các sự cố dường như là các sự kiện bàn phím JavaScript đánh cắp các phím nhấn, nên không thể xây dựng tập lệnh JavaScript (sẽ được sử dụng qua Greasemonkey) để hủy liên kết tất cả các sự kiện bàn phím này, do đó trả lại cách sử dụng đúng từng phím tắt cho trình duyệt?

Tôi không chắc điều này khả thi đến mức nào, nhưng ai đó có nhiều kinh nghiệm về JavaScript / Greasemonkey có thể giúp đỡ (có thể đáng để hỏi về SO).


2
Điều này hoạt động thông qua cơ chế onKeyPress - Firefox gửi mọi phím bấm đến trang web trước và chỉ nhìn vào nó sau đó nếu nó không bị hủy hoặc bị chặn. Một số phép thuật Greasemonkey có thể chặn các phím bấm trước khi trang web và bằng cách nào đó chạy các chức năng firefox trực tiếp có thể có thể, nhưng nó không rõ ràng.
Taw

4

Vấn đề là bất kỳ trang nào cũng có thể chạy Javascript thiết lập trình xử lý sự kiện để lấy các sự kiện nhấn phím và các điều khiển javascript của Firefox không đủ chi tiết để ngăn chặn nó mà không phá vỡ các tính năng javascript khác.

Cách duy nhất để ngăn chặn điều này là vô hiệu hóa Javascript (Công cụ -> Tùy chọn, tab [Nội dung], bỏ chọn Bật JavaScript ). Hoặc bạn có thể tắt Javascript trên cơ sở từng trang web với một tiện ích mở rộng như NoScript.

Firefox cho phép bạn ngăn chặn một số sử dụng Javascript nhất định , như di chuyển / thay đổi kích thước cửa sổ, thay đổi hoặc vô hiệu hóa menu ngữ cảnh, v.v; nhưng không có gì để ngăn chặn các trang web chặn các sự kiện bàn phím.

Có thể có một phần mở rộng mang lại mức độ kiểm soát này - tôi không biết về một phần mở rộng.
Tùy chọn Javascript , nhưng tiện ích mở rộng đó không còn được cập nhật.


2
Tùy chọn Javascript và một vài tiện ích mở rộng khác mà tôi đã thử không hỗ trợ điều này. Chặn tất cả các javascript sẽ làm cho web không thể sử dụng được nhiều, đây thực sự không phải là một lựa chọn.
Taw

0

Có khả năng các plugin của bên thứ ba đang lấy trọng tâm từ cửa sổ trình duyệt chính. Trong trường hợp đó, đầu vào bàn phím (trừ các ngắt) sẽ bị chặn bởi plugin. Nếu bạn không thích điều này, bạn luôn có thể xóa (các) plugin vi phạm [Tôi cho rằng nó có khả năng là flash].


3
Flash cũng vậy, nhưng Javascript đơn giản có thể đánh cắp các phím tắt. Bắt đầu một câu hỏi mới tại đây và nhấn Cmd-L (Ctrl-L trên máy không Mac) trong khi ở cửa sổ văn bản câu hỏi. Thay vì đi đến thanh url như bình thường, phím tắt sẽ bị đánh cắp và bạn sẽ thấy một số hộp thoại siêu liên kết chèn. Nó đã từng rất hiếm, nhưng quá nhiều trang web bắt đầu thực hiện gần đây.
Taw

Tôi vừa thử nó trên Windows 7 chạy Firefox và tôi đã nhảy trực tiếp vào thanh địa chỉ như bình thường.
Daisetsu

Xin lỗi, tôi không rõ ràng - điều này chỉ xảy ra khi hộp thoại hộp văn bản phong phú được chọn. Bạn đã làm điểu đó? Tôi đã thử nghiệm trên OSX với Firefox, Opera, Safari và Chrome. Trong cả bốn thông thường, Cmd-L nhảy vào thanh url (và Ctrl-L không làm gì cả). Khi chỉnh sửa thân câu hỏi, cả Cmd-L và Ctrl-L đều hiển thị hộp thoại siêu liên kết thay thế.
Taw

Hình như bạn đúng. Tôi không có ý tưởng làm thế nào để ngăn chặn điều này. :( Bây giờ đây là một câu hỏi thú vị vì vậy tôi sẽ nâng cao câu hỏi của bạn. Nếu không có ai trả lời, tôi sẽ ném tiền thưởng cho nó.
Daisetsu

Vấn đề không nằm ở plugin. Plugin là một vấn đề riêng biệt. Và một vấn đề khác, sau tất cả. Trong các plugin, tất cả trọng tâm đều bị plugin đánh cắp, vì đó là một thực thể riêng biệt. Với JavaScript, giao diện người dùng firefox là JavaScript và có các ràng buộc riêng, nhưng các trang web có thể xác định các ràng buộc ở cùng cấp độ. Cho đến nay, vẫn không có cơ chế để ngăn chặn điều này.
njsg

0

Sau nhiều thử nghiệm trên nhiều trình duyệt khác nhau, việc chặn các phím khi chúng bị tắt (không được nhấn) sẽ dễ dàng hơn vì một số "Khóa tích hợp ứng dụng" này khó bị chặn với sự kiện "nhấn phím".

Tôi đã đưa ra kịch bản này tương thích với trình duyệt chéo (Tôi đã không kiểm tra IE của Microsoft). Lưu ý rằng các trình duyệt trả về các mã khác nhau cho một số khóa. Trong trường hợp của tôi, tôi muốn ngăn Ctrl + P.

Phím "P" trên chrome được xem như e.keyCode == 80trên opera e.charCode == 16, trong khi trên firefox, nó là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();
    }  
});

Tôi đã sử dụng jQuery.


0

Nếu bạn muốn vô hiệu hóa bất kỳ khóa ctrl nào bị chiếm bởi trang web, chỉ cần lọc tất cả các mã của chữ cái từ az (dựa trên câu trả lời được chấp nhận và làm việc trước đó)

// ==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

Có lẽ bạn có thể sử dụng Autohotkey hoặc Autoit, một trong những chương trình đó và nếu bạn có thể thực hiện các combo hotkey và liên kết chúng với các chức năng firefox, hãy nói

Ctrl-; T sang tab mới

Ctrl-; N đến cửa sổ mới, v.v.

Tôi không biết cách sử dụng Autohotkey hoặc Autoit, vì vậy người khác sẽ phải xác minh rằng điều này có thể hoạt động, tôi chỉ cung cấp đây là một ý tưởng tiềm năng.


-2

Phiên bản hiện tại của Firefox cho phép chúng tôi "vô hiệu hóa javascript để chiếm quyền điều khiển menu ngữ cảnh":

Công cụ / Tùy chọn / Nội dung / Bật Javascript Nâng cao / Tắt hoặc thay thế menu ngữ cảnh

Nhưng không có tính năng "vô hiệu hóa javascript để chiếm quyền điều khiển bàn phím".

ps. Tôi ghét trang web twitter, các phím tắt của nó xung đột với các phím tắt dựa trên hệ thống của tôi: J, K, L, I

Tôi đã thực hiện yêu cầu tính năng trên bugzilla.mozilla.org, vui lòng bình luận tại đó: https://ormszilla.mozilla.org/show_orms.cgi?id=775002

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.