Cara melarang pintasan keyboard mencuri oleh situs web di Firefox

57

Banyak situs web, terutama segala sesuatu yang melibatkan pengeditan teks kaya (situs ini juga bersalah), mencuri pintasan keyboard yang biasanya digunakan untuk mengontrol Firefox dan membuat mereka melakukan hal lain. Benar-benar menyebalkan ketika saya menekan sesuatu seperti Cmd-number, Cmd-L, Cmd-T, atau Cmd-K dan tidak melakukan apa yang saya inginkan. Bisakah saya menghentikannya?

Sebenarnya, itu mungkin yang terbaik jika saya bisa melarang mencuri semua pintasan Cmd *. Saya belum pernah melihat mereka digunakan untuk sesuatu yang bermanfaat. Apa itu mungkin?

taw
sumber
4
Setuju, itu menyebalkan. FogBugz memiliki implementasi pintasan keyboard yang sangat baik. CTRL-;memasuki mode pintas dan sorot semua perintah yang terlihat di layar dengan pintasan yang tersedia. Setiap pintasan adalah kombo, jadi huruf baru adalah CTRL-; Ndan edit CTRL-; E. Sangat mudah digunakan dan tidak ada konflik. Saya berharap lebih banyak situs akan menggunakan sesuatu seperti ini karena lebih mudah bagi pengguna dan tidak mengesampingkan pintasan browser. Sayang sekali SuperUser tidak melakukan ini karena itu dari orang yang sama dengan FogBugz.
Sam
Lihat juga superuser.com/questions/399352/…
Mekanik keong
1
Ini sedang dibahas pada permintaan fitur ini di Bugzilla .
Mekanik siput
Saya mengunjungi banyak halaman intranet di tempat kerja yang entah bagaimana mengacaukan cmd + N, jadi saya tidak pernah dapat membuka jendela browser baru dari keyboard! Sangat mengganggu!
Nicolas Miari
1
Setelah ~ 12 tahun, Mozilla telah menstabilkan perbaikan yang cukup masuk akal untuk ini. Ini tersembunyi dengan baik dan tidak sempurna, tetapi mungkin menyelamatkan kewarasan Anda. Silakan lihat jawaban saya di sini: superuser.com/a/1317514/158390
Lambart

Jawaban:

24

Berkat @run-atproperti baru Greasemonkey , ini sekarang mungkin!

Saya mengambil inspirasi dari skrip ini dan skrip ini untuk menggabungkan mereka ke dalam skrip Pengguna yang berhasil memotong pintasan keyboard Ctrl+ Tdan Ctrl+ S. Saya diuji di dalam Firefox 17 ESR dan 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);
Martin JH
sumber
1
Ini sangat membantu. Pengguna OS X harus bertukar e.ctrlKeyuntuk e.cmdKeydan e.cmdKey && e.shiftKeymendapatkan kembali sebagian besar pintasan browser mereka.
JamesGecko
Skrip ini berfungsi untuk saya memperbaiki CTRL + TAB dengan menambahkan 9ke array kode kunci. Terima kasih!
Mike Mueller
@JamesGecko Ditemukan melalui jawaban ini Anda harus / bisa menggunakan e.metaKey untuk kunci perintah.
riezebosch
3
Kode ini berfungsi! Perlu diingat bahwa ia memfilter tidak hanya Ctrl + Key, tetapi juga Ctrl + Alt + Key, Ctrl + Shift + Key dan Ctrl + Alt + Shift + Key, karena hanya memeriksa keadaan pengubah Ctrl.
RomanSt
Pertanyaan pertama: untuk skrip yang terkenal berfungsi di Firefox, mengapa skrip memeriksa apakah browser itu Opera? Dan pertanyaan kedua: komentar mengatakan kode karakter untuk 's' dan 't', tetapi kode sebenarnya untuk 'S' dan 'T'. Apakah saya perlu menentukan kode huruf besar untuk beberapa alasan? Terima kasih.
Douglas Diadakan
8

11 tahun setelah bug diajukan, Mozilla akhirnya dapat mengerjakan permintaan fitur populer ini, dan tampaknya berfungsi baik sekarang (diuji di Firefox 66.0.3 / Ubuntu).

(Terima kasih kepada @PerJohansson karena menunjukkan bahwa mereka telah membuat pengaturan lebih sulit ditemukan sejak FF 59.)

Anda dapat menonaktifkan pintasan situs dengan mengikuti langkah-langkah ini:

  1. Klik (i)ikon di Location Bar
  2. Klik panah kecil ( >) di sebelah kanan item status "Koneksi".
  3. Sekarang, Anda akan melihat More Informationdi bagian bawah. Klik itu, dan Anda akhirnya akan sampai ke Page Infodialog.
  4. Terakhir, buka Permissionstab dan sesuaikan Override Keyboard Shortcutspengaturan.

Berikut adalah beberapa cuplikan layar terbaru (Mei 2019) untuk setiap langkah:

Tangkapan layar dialog Info Situs Firefox

Tangkapan layar dialog Keamanan Situs Firefox

Tangkapan layar tab Izin Firefox

Jika Anda tertarik dengan sejarah perbaikan ini, berikut adalah tiket Mozilla terkait: https://bugzilla.mozilla.org/show_bug.cgi?id=380637 dan https://bugzilla.mozilla.org/show_bug.cgi ? id = 1445942

Lambart
sumber
2
Di Firefox 64 (tidak yakin di mana ia muncul), Anda harus Klik "Connection" => "Informasi lebih lanjut" untuk mengakses kotak idalog ini. Cogwheel izin masuk ke Preferensi sebagai gantinya yang bukan tempat yang tepat.
Per Johansson
Terima kasih @PerJohansson, saya telah memperbarui tiketnya.
Lambart
Apa about:configopsi untuk mengubah default? Saya ingin memaksa semua situs untuk tidak dapat terhubung ke keyboard saya
inetknght
5

Penelitian ekstensif menunjukkan bahwa pada versi Firefox saat ini (3.6.x) ini tidak mungkin - semua konflik kunci yang mengikat diselesaikan dengan prioritas: Sistem> Situs Web> Firefox - urutan yang agak bodoh. Tak satu pun dari addons yang saya coba tampaknya dapat memperbaikinya.

Mungkin itu bisa dilakukan di versi masa depan, tetapi saat ini jawabannya adalah - Tidak mungkin.

taw
sumber
1
Menggunakan FF 30.0 hampir 4 tahun kemudian dan ini masih menjadi masalah. Saya akan mencoba ide Martin Greasemonkey.
LGT
2
Menggunakan FF 53.0 hampir 8 tahun kemudian dan ini masih menjadi masalah.
Daniel
5

Karena masalah tersebut tampaknya merupakan peristiwa keyboard JavaScript yang mencuri penekanan tombol, apakah tidak mungkin untuk membuat skrip JavaScript (untuk digunakan melalui Greasemonkey) yang melepaskan ikatan semua peristiwa keyboard ini, sehingga mengembalikan penggunaan yang tepat dari setiap pintasan ke browser?

Saya tidak yakin seberapa layaknya ini, tetapi seseorang dengan lebih banyak JavaScript / Greasemonkey experiance mungkin dapat membantu (mungkin layak ditanyakan pada SO).

DMA57361
sumber
2
Ini bekerja melalui mekanisme onKeyPress - Firefox mengirim setiap penekanan tombol ke situs web terlebih dahulu, dan hanya melihatnya setelah itu jika tidak dibatalkan atau disadap. Beberapa sihir Greasemonkey yang akan mencegat penekanan tombol sebelum situs web dan entah bagaimana menjalankan fungsi firefox secara langsung mungkin dilakukan, tetapi itu jauh dari jelas.
taw
4

Masalahnya adalah bahwa setiap halaman dapat menjalankan Javascript yang mengatur event handler untuk mengambil peristiwa penekanan tombol, dan kontrol javascript Firefox tidak cukup baik untuk menghentikannya tanpa merusak fitur javascript lainnya.

Satu-satunya cara untuk mencegah ini adalah dengan menonaktifkan Javascript (Alat -> Opsi, tab [Konten], hapus centang pada JavaScript Aktifkan ). Atau Anda dapat menonaktifkan Javascript pada basis per-situs dengan ekstensi seperti NoScript.

Firefox memungkinkan Anda mencegah penggunaan Javascript tertentu , seperti memindahkan / mengubah ukuran jendela, mengubah atau menonaktifkan menu konteks, dll; tetapi tidak ada yang mencegah situs web menyadap kejadian keyboard.

Mungkin ada ekstensi yang memberikan tingkat kontrol ini - saya tidak menyadarinya.
Ada Opsi Javascript , tetapi ekstensi itu tidak lagi diperbarui.

njd
sumber
2
Opsi Javascript dan beberapa ekstensi lain yang saya coba tidak mendukung ini. Memblokir semua javascript akan membuat web tidak bisa digunakan, ini bukan pilihan.
taw
0

Kemungkinan plugin pihak ketiga mengambil fokus dari jendela browser utama. Dalam hal ini input keyboard (kecuali interupsi) akan dicegat oleh plugin. Jika Anda tidak suka ini, Anda selalu dapat menghapus plugin yang menyinggung [saya akan menganggap itu kemungkinan flash].

Daisetsu
sumber
3
Flash juga melakukannya, tetapi Javascript biasa bisa mencuri pintasan. Mulai pertanyaan baru di sini, dan tekan Cmd-L (Ctrl-L pada non-Mac) saat berada di jendela teks pertanyaan. Alih-alih pergi ke bilah url sebagaimana mestinya, pintasan akan dicuri dan Anda akan melihat beberapa dialog tautan hyperlink. Dulu jarang, tetapi terlalu banyak situs web mulai melakukannya baru-baru ini.
taw
Saya baru saja mencobanya di Windows 7 yang menjalankan Firefox dan saya langsung melompat ke bilah alamat seperti biasanya.
Daisetsu
Maaf, saya tidak jelas - ini hanya terjadi ketika dialog kotak teks kaya dipilih. Apakah kamu melakukan itu? Saya diuji di OSX dengan Firefox, Opera, Safari, dan Chrome. Dalam keempat Cmd-L biasanya melompat ke bar url (dan Ctrl-L tidak melakukan apa-apa). Saat mengedit tubuh pertanyaan, baik Cmd-L dan Ctrl-L menunjukkan dialog memasukkan hyperlink.
taw
Sepertinya kamu benar. Saya tidak tahu bagaimana mencegahnya. :( Ini pertanyaan yang menarik sekarang, jadi saya menjawab pertanyaan Anda. Jika tidak ada yang menjawab, saya akan memberikan hadiah.
Daisetsu
Masalahnya bukan dengan plugin. Plugin adalah masalah tersendiri. Dan masalah yang berbeda. Dalam plugin, semua fokus dicuri oleh plugin, karena itu adalah entitas yang terpisah. Dengan JavaScript, firefox UI adalah JavaScript dan memiliki binding sendiri, tetapi situs dapat menentukan binding yang berada di level yang sama. Sejauh ini, belum ada mekanisme untuk mencegah hal ini.
njsg
0

Setelah banyak pengujian pada berbagai browser, lebih mudah untuk mencegat kunci ketika mereka turun (tidak ditekan) karena beberapa "kunci terintegrasi aplikasi" ini sulit untuk dicegat dengan acara "menekan tombol".

Saya datang dengan skrip ini yang semacam browser yang kompatibel lintas (saya tidak menguji untuk Microsoft IE). Perhatikan bahwa browser mengembalikan kode yang berbeda untuk beberapa tombol. Dalam kasus saya, saya ingin mencegah Ctrl + P.

Kunci "P" pada chrome dilihat sebagai e.keyCode == 80, pada opera, itu e.charCode == 16, sedangkan pada firefoxe.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();
    }  
});

Saya menggunakan jQuery.

Peter
sumber
0

Jika Anda ingin menonaktifkan kunci ctrl apa pun yang diambil alih oleh halaman web, cukup filter untuk semua kode huruf dari az (membangun jawaban yang diterima dan berfungsi sebelumnya)

// ==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);
Steve Horvath
sumber
-1

Mungkin Anda dapat menggunakan Autohotkey atau Autoit, salah satu program tersebut dan jika Anda dapat melakukan kombo hotkey dan menautkannya ke fungsi firefox, katakanlah

Ctrl-; T ke tab baru

Ctrl-; N ke jendela baru, dan seterusnya.

Saya tidak tahu cara menggunakan Autohotkey atau Autoit, jadi orang lain harus memverifikasi bahwa ini bisa berfungsi, saya hanya menawarkan ini sebagai ide potensial.

Nathaniel Saxe
sumber
-2

Versi Firefox saat ini memungkinkan kami untuk "menonaktifkan javascript untuk membajak menu konteks":

Alat / Opsi / Konten / Aktifkan Javascript Lanjut / Nonaktifkan atau ganti menu konteks

Tetapi tidak ada fitur untuk "menonaktifkan javascript untuk membajak pintasan keyboard".

ps. Saya benci situs web twitter, pintasan keyboard-nya bertentangan dengan pintasan keyboard berbasis sistem saya: J, K, L, I

Saya telah membuat permintaan fitur di bugzilla.mozilla.org, silakan komentar di sana: https://bugzilla.mozilla.org/show_bug.cgi?id=775002

diyism
sumber