Bagaimana saya mencegah halaman yang saya kunjungi dari menimpa kunci pintas Firefox yang dipilih?

40

Di Firefox, bagaimana saya bisa mencegah halaman mengesampingkan pintasan keyboard bawaan Firefox melalui Javascript pada basis per kunci? Lebih disukai berdasarkan situs, juga? Override yang paling membuat frustrasi adalah garis miring ('/') yang tertaut ke "Temukan di halaman". Situs-situs seperti hasil pencarian Google, timeline Twitter, beberapa wiki, dan halaman lain mencuri kunci slash untuk kotak pencarian mereka sendiri, yang sama sekali salah.

Karena perwakilan saya membuat saya bertanya, mengedit, dan menjawab pertanyaan, tetapi tidak menambahkan komentar, ini pada dasarnya merupakan duplikat dari dua pertanyaan lainnya yang tidak dijawab dengan benar:

Bagaimana cara menghentikan situs web untuk mengganti pintasan keyboard saya

Firefox: jangan izinkan situs web untuk mengganti kunci / (garis miring)

Shel yang aman
sumber
1
Saya merasa frustrasi dengan PHPMyAdmin yang menimpa ctrl- <panah kiri> ... itu pertanyaan yang bagus
Sangat tidak teratur
1
Saya tidak tahan situs web yang menimpa perilaku default. Banyak yang melakukannya dengan klik tengah juga. Lihat pertanyaan terkait ini untuk solusi masalah itu.
Cam Jackson

Jawaban:

12

Berdasarkan jawaban edymtt, saya telah membuat skrip pengguna yang hanya menonaktifkan pintasan keyboard tertentu. Anda dapat menambahkan lebih banyak cara pintas untuk menonaktifkan dengan menambahkan kode kunci ke array kode kunci, atau membatasi situs mana yang menerapkannya dengan mengganti @includetag dengan satu pola atau lebih.

Instal menggunakan greasemonkey .

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

keycodes = [191] // Keycode for '/', add more keycodes to disable other key captures

document.addEventListener('keydown', function(e) {
//    alert(e.keyCode); //uncomment to find out the keycode for any given key
    if (keycodes.indexOf(e.keyCode) != -1)
    {
        e.cancelBubble = true;
        e.stopImmediatePropagation();
    }
    return false;
});
MikeFHay
sumber
2
Luar biasa! Solusi yang hampir lengkap untuk kunci meta, juga --- Saya berusaha menjaga Google Documents dari mencegat tab Sebelumnya (Cmd + Kiri) dan tab Berikutnya (Cmd + Kanan) dan menemukan bahwa saya juga perlu mengatur useCapture menjadi true; yaitu, document.addEventListener ('keydown', yourHandlerFn, true)
chbrown
1
perhatikan bahwa nilainya 191tergantung pada tata letak keyboard Anda, sejauh pengaturan azerty saya (saya punya 16 + 58 untuk area alpha dan 111 untuk numpad)
sylvainulg
2
dan sayangnya tidak berfungsi lagi saat ini (diuji pada phabricator dan twitter). pendengar khusus dipicu tetapi acara situs dipicu pula dan 'pencarian di halaman' tidak muncul.
sylvainulg
1
@sylvainulg Saya melihat bahwa itu tidak berfungsi di Twitter, tapi setidaknya masih berfungsi di GitHub. Saya bertanya-tanya apa yang berubah.
binki
Ini berfungsi di mana-mana saya mencobanya kecuali php.net. Saya ingin tahu acara apa yang mereka gunakan.
qwazix
8

Berkenaan dengan Google dan pintasan Cari Cepat, Anda dapat menginstal skrip Greasemonkey ini:

http://userscripts-mirror.org/scripts/show/132237

Seperti yang dijelaskan dalam uraian, ini "menghentikan google dari memfokuskan input pencarian pada setiap penekanan tombol" - khususnya, jika Anda menekan /dengan fokus keyboard di luar kotak pencarian, Cari Cepat akan muncul, seperti halnya di situs web lain.

Saya hanya menginstalnya tanpa menyentuh kode, tetapi saya pikir itu bisa dengan mudah disesuaikan untuk bekerja dengan situs lain dan / atau cara pintas lainnya.

edymtt
sumber
Untuk memperjelas: skrip pengguna ini menghentikan SEMUA pintasan keyboard pada halaman yang diaktifkan untuknya, menjaga fungsionalitas peramban itu sendiri. Untuk menerapkannya ke situs web lain cukup tambahkan tag @include lainnya.
MikeFHay
tanpa informasi apa pun yang bersembunyi di balik tautan, jawabannya sayangnya tidak berguna ketika userscripts-mirror.org turun, diblokir oleh firewall atau apa pun.
sylvainulg
8

Sejak Firefox 58 dimungkinkan untuk menonaktifkan override pintasan keyboard per situs web.

"Abaikan Pintasan Keyboard" dan banyak izin lainnya tersedia di "Info Halaman -> Izin" (di bawah ikon info di bilah URL).

Contoh Izin Firefox untuk superuser.com

Override keyboard diperkenalkan di Firefox # 380637

Alec Istomin
sumber
1
Ya, setelah 11 tahun mereka akhirnya melakukan pekerjaan setengah-setengah memperbaiki tiket itu. Sayangnya implementasi saat ini (masih dalam FF 59) sepenuhnya menonaktifkan Backspacedan Deletekunci, yang sangat menyebalkan.
Lambart
6
Juga, sayangnya itu tidak mencegah halaman web untuk menangkap input yang tidak bergeser (yaitu, tidak ada Ctrl, Shiftatau Altkunci) - yang berarti ini tidak membantu sama sekali dengan kunci kunci yang disebutkan dalam pertanyaan asli.
Lambart
@Lambart - baik untuk tahu, saya akhirnya tidak menggunakan ini juga, karena pintasan keyboard firefox menjadi diperbaiki di jira dan pertemuan (di suatu tempat di sekitar firefox 59)
Alec Istomin
2
apa yang diperbaiki? JIRA dan Confluence keduanya masih mengambil semua jenis kunci yang terus-menerus mengganggu alur kerja saya. Saya melihat ini sebagai masalah Atlassian: Mereka harus mengizinkan orang untuk menonaktifkan (dan / atau mengubah) "pintasan" mereka.
Lambart
firefox bugzilla.mozilla.org/show_bug.cgi?id=1433592 produk atlassian tetap untuk saya (mungkin ada perbaikan atlassian dalam jangka waktu yang sama)
Alec Istomin
0

Berikut ini adalah skrip yang lebih umum - Anda dapat menentukan sejumlah acara penekanan tombol untuk dinonaktifkan.

https://greasyfork.org/en/scripts/5819-disable-website-keyboard-hooks

// ==UserScript==
// @name           Disable website keyboard hooks
// @description    Stop websites from hijacking keyboard shortcuts.
// @author         Isaac Levy
// @run-at         document-start
// @include        *
// @grant          none
// @version        0.0.1
// @namespace      https://isaacrlevy.com
// ==/UserScript==

var keycodes = [ // Add keycodes as desired, keep sorted.
    37, 38, 39, 40 // Arrow keys.
]

var meta_keycodes = [ // Disable these when meta key is pressed.
    70
];

// Don't change below this line.

var isMac = navigator.platform.toLowerCase().indexOf('mac') >= 0;

// Create a fast lookup.
// This saves work during normal typing. Maybe unnecessary.
var keycode_offset = keycodes[0];
var keycode_arr = Array(keycodes[keycodes.length - 1] - keycode_offset)
for (var i = 0, len = keycodes.length; i < len; i++) {
    keycode_arr[keycodes[i] - keycode_offset] = true;
}

document.addEventListener('keydown', function(e) {
    //console.log(e);
    if ((isMac && e.metaKey) || (!isMac && e.ctrlKey)) {
        if (meta_keycodes.indexOf(e.keyCode) >= 0) {
            e.stopImmediatePropagation();
        }
    } else if (keycode_arr[e.keyCode - keycode_offset]) {
        e.stopImmediatePropagation();
    }
    return false;
});
vackamole
sumber
Maaf - tapi saya tidak bisa menyelesaikannya. Terutama saya ingin menonaktifkan tombol panah kiri dan kanan di situs - tetapi dengan skrip ini tombol panah masih mengontrol situs ???
Christian Herenz
-3

Add-on YesScript adalah solusi mudah bagi saya. Ini mencegah situs menjalankan JavaScript tetapi hanya situs yang Anda pilih. Sebagian besar situs-situs ini membajak pintasan keyboard oleh JavaScript. Saya menemukannya di artikel ini dari Ghacks.net.

Saudara Phoenix
sumber