ฉันจะป้องกันหน้าเว็บที่ฉันเข้าชมไม่ให้แทนที่คีย์ลัดของ Firefox ที่เลือกได้อย่างไร


40

ใน Firefox ฉันจะป้องกันหน้าจากการแทนที่แป้นพิมพ์ลัดในตัวของ Firefox ผ่าน Javascript ในแบบต่อคีย์ได้อย่างไร โดยเฉพาะอย่างยิ่งในแต่ละเว็บไซต์ด้วย? การแทนที่ที่น่าผิดหวังที่สุดคือฟอร์เวิร์ดสแลช ('/') ที่เชื่อมโยงกับ "ค้นหาในหน้า" เว็บไซต์ต่างๆเช่นผลการค้นหาของ Google เส้นเวลา Twitter บางส่วนและหน้าอื่น ๆ ขโมยคีย์สแลชสำหรับช่องค้นหาของตนเองซึ่งผิดอย่างสิ้นเชิง

เนื่องจากตัวแทนของฉันอนุญาตให้ฉันถามแก้ไขและตอบคำถาม แต่ไม่ได้เพิ่มความคิดเห็นนี่เป็นคำถามที่เหมือนกันกับคำถามสองข้อที่ไม่ได้ตอบอย่างถูกต้อง:

ฉันจะหยุดเว็บไซต์เพื่อแทนที่แป้นพิมพ์ลัดของฉันได้อย่างไร

Firefox: ไม่อนุญาตให้เว็บไซต์แทนที่คีย์ / (สแลช)


1
ฉันรู้สึกหงุดหงิดกับ PHPMyAdmin ที่เอาชนะ ctrl- <ลูกศรซ้าย> ... มันเป็นคำถามที่ดี
ผิดปกติอย่างมาก

1
ฉันไม่สามารถยืนเว็บไซต์ที่แทนที่พฤติกรรมเริ่มต้น ทำมากกับการคลิกกลางเช่นกัน ดูคำถามที่เกี่ยวข้องนี้สำหรับการแก้ปัญหา
Cam Jackson

คำตอบ:


12

จากคำตอบของ edymtt ฉันได้สร้าง userscript ซึ่งจะปิดการใช้งานเฉพาะแป้นพิมพ์ลัดเฉพาะ คุณสามารถเพิ่มทางลัดมากขึ้นในการปิดการใช้งานโดยการเพิ่มการพิมพ์ซ้ำกับการพิมพ์ซ้ำอาร์เรย์หรือ จำกัด เว็บไซต์ที่จะนำมันไปใช้โดยการเปลี่ยน@includeแท็กที่มีหนึ่งหรือมากกว่าหนึ่งรูปแบบ

ติดตั้งโดยใช้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;
});

2
! น่ากลัว เกือบจะเป็นโซลูชันที่สมบูรณ์สำหรับเมตาคีย์เช่นกัน --- ฉันพยายามป้องกันไม่ให้ Google เอกสารดักจับแท็บก่อนหน้า (Cmd + ซ้าย) และแท็บถัดไป (Cmd + ขวา) และพบว่าฉันต้องตั้ง useCapture เป็นจริงด้วยเช่นกัน เช่น document.addEventListener ('keydown', yourHandlerFn, จริง)
chbrown

1
โปรดทราบว่าค่า191ขึ้นอยู่กับรูปแบบแป้นพิมพ์ของคุณเท่าที่ฉันติดตั้ง azerty (ฉันมี 16 + 58 สำหรับพื้นที่อัลฟ่าและ 111 สำหรับ numpad)
sylvainulg

2
และน่าเสียดายที่ไม่สามารถใช้งานได้อีกต่อไปในทุกวันนี้ (ทดสอบบนเครื่องกรองและทวิตเตอร์) ฟังที่กำหนดเองจะถูกเรียก แต่เหตุการณ์ของเว็บไซต์จะถูกเรียกต่อไปและ 'ค้นหาในหน้า' ไม่ปรากฏขึ้น
sylvainulg

1
@sylvainulg ฉันเห็นว่ามันใช้งานไม่ได้บน Twitter แต่อย่างน้อยก็ใช้กับ GitHub ได้ ฉันสงสัยว่ามีอะไรเปลี่ยนแปลง
binki

สิ่งนี้ใช้ได้ทุกที่ที่ฉันลองยกเว้น php.net ฉันสงสัยว่าพวกเขากำลังใช้เหตุการณ์อะไร
qwazix

8

สำหรับ Google และทางลัดการค้นหาอย่างรวดเร็วคุณสามารถติดตั้งสคริปต์ Greasemonkey นี้:

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

ดังที่คำอธิบายบอกไว้ว่า "หยุด Google ไม่ให้โฟกัสการป้อนข้อมูลการค้นหาในทุกการกดปุ่ม" โดยเฉพาะอย่างยิ่งถ้าคุณกดปุ่ม/โฟกัสบนแป้นพิมพ์นอกช่องค้นหาการค้นหาด่วนจะปรากฏขึ้นเช่นเดียวกับในเว็บไซต์อื่น ๆ

ฉันเพิ่งติดตั้งโดยไม่ต้องสัมผัสรหัส แต่ฉันคิดว่ามันสามารถปรับให้ใช้งานได้กับเว็บไซต์อื่น ๆ และ / หรือทางลัดอื่น ๆ


ในการชี้แจง: userscript นี้จะหยุดแป้นพิมพ์ลัดทั้งหมดบนหน้าเว็บที่เปิดใช้งานเพื่อคงไว้ซึ่งการทำงานของเบราว์เซอร์ หากต้องการใช้กับเว็บไซต์อื่น ๆ เพียงเพิ่มแท็ก @include เพิ่มเติม
MikeFHay

หากไม่มีข้อมูลใด ๆ เกี่ยวกับสิ่งที่ซ่อนอยู่หลังลิงก์คำตอบนั้นไม่มีประโยชน์เลยเมื่อ userscripts-mirror.org หยุดทำงานถูกบล็อกโดยไฟร์วอลล์หรืออะไรก็ตาม
sylvainulg

8

ตั้งแต่ Firefox 58 เป็นไปได้ที่จะปิดการใช้งานแป้นพิมพ์ลัดแทนเว็บไซต์

"แทนที่แป้นพิมพ์ลัด" และสิทธิ์อื่น ๆ มากมายมีอยู่ใน "ข้อมูลหน้า -> การอนุญาต" (ภายใต้ไอคอนข้อมูลในแถบ URL)

ตัวอย่างการอนุญาต Firefox สำหรับ superuser.com

มีการแนะนำการแทนที่คีย์บอร์ดใน Firefox # 380637


1
ใช่หลังจาก 11 ปีในที่สุดพวกเขาก็ทำงานได้ครึ่งทางในการซ่อมตั๋วนั้น น่าเสียดายที่การใช้งานปัจจุบัน (ยังอยู่ใน FF 59) ปิดการใช้งานBackspaceและDeleteปุ่มอย่างสมบูรณ์ซึ่งดูดจริงๆ
Lambart

6
นอกจากนี้น่าเสียดายที่มันไม่ได้ป้องกันหน้าเว็บจากการจับภาพอินพุตที่ไม่ถูกเลื่อน (เช่น, ไม่Ctrl, ShiftหรือAltคีย์) - ซึ่งหมายความว่าสิ่งนี้ไม่ได้ช่วยอะไรเลยเมื่อใช้คีย์สแลชที่กล่าวถึงในคำถามเดิม
Lambart

@ Lambart - ดีฉันรู้ว่าฉันไม่ได้ใช้มันเช่นกันเนื่องจากแป้นพิมพ์ลัดของ Firefox ได้รับการแก้ไขใน jira และบรรจบกัน (ที่ไหนสักแห่งรอบ ๆ firefox 59)
Alec Istomin

2
สิ่งที่ได้รับการแก้ไข? JIRA และ Confluence ทั้งคู่ยังคงใช้กุญแจทุกประเภทที่ขัดขวางกระบวนการทำงานของฉันอย่างต่อเนื่อง ฉันเห็นสิ่งนี้เป็นปัญหาของ Atlassian: พวกเขาต้องอนุญาตให้ผู้ใช้ปิดการใช้งาน (และ / หรือเปลี่ยน) "ทางลัด" ของพวกเขา
Lambart

firefox bugzilla.mozilla.org/show_bug.cgi?id=1433592ผลิตภัณฑ์ atlassian คงที่สำหรับฉัน (อาจมีการแก้ไข atlassian ในกรอบเวลาเดียวกัน)
Alec Istomin

0

นี่คือสคริปต์ทั่วไปที่มากขึ้น - คุณสามารถกำหนดจำนวนเหตุการณ์ keypress เพื่อปิดใช้งาน

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;
});

ฉันขอโทษ - แต่ฉันไม่สามารถทำให้เรื่องนี้ทำงานได้ โดยเฉพาะอย่างยิ่งฉันต้องการปิดการใช้งานปุ่มลูกศรซ้ายและขวาบนเว็บไซต์ - แต่ด้วยสคริปต์นี้ปุ่มลูกศรยังคงควบคุมเว็บไซต์ ???
Christian Herenz

-3

YesScript Add-on เป็นโซลูชันที่ไม่ยุ่งยากสำหรับฉัน มันป้องกันเว็บไซต์จากการเรียกใช้ JavaScript แต่เฉพาะเว็บไซต์ที่คุณเลือก ส่วนใหญ่ไซต์เหล่านี้ไฮแจ็คช็อตคัตคีย์บอร์ดโดย JavaScript ฉันพบเกี่ยวกับเรื่องนี้ในรูปแบบบทความนี้ Ghacks.net

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.