วิธีห้ามแป้นพิมพ์ลัดขโมยโดยเว็บไซต์ใน Firefox


57

เว็บไซต์หลายแห่งโดยเฉพาะทุกอย่างที่เกี่ยวข้องกับการแก้ไขข้อความสมบูรณ์ (ไซต์นี้มีความผิดเช่นกัน) ขโมยแป้นพิมพ์ลัดตามปกติที่ใช้เพื่อควบคุม Firefox และทำให้พวกเขาทำอย่างอื่นแทน มันน่าโมโหมากเมื่อฉันกดบางอย่างเช่น Cmd-number, Cmd-L, Cmd-T หรือ Cmd-K และมันไม่ได้ทำตามที่ฉันต้องการ ฉันจะหยุดมันได้ไหม

ที่จริงแล้วมันน่าจะดีที่สุดถ้าฉันห้ามการขโมยปุ่มลัด Cmd- * ทั้งหมด ฉันไม่เคยเห็นพวกเขาใช้สิ่งที่มีประโยชน์ เป็นไปได้ไหม?


4
ตกลงมันทำให้โกรธมาก FogBugz มีการนำแป้นพิมพ์ลัดมาใช้อย่างดี CTRL-;เข้าสู่โหมดทางลัดและไฮไลต์คำสั่งทั้งหมดที่ปรากฏบนหน้าจอด้วยทางลัดที่มี ทางลัดทุกคนเป็นคำสั่งผสมดังนั้นกรณีใหม่คือและแก้ไขคือCTRL-; N CTRL-; Eง่ายมากที่จะทำความคุ้นเคยและไม่มีข้อขัดแย้ง ฉันหวังว่าไซต์อื่น ๆ จะใช้สิ่งนี้ทำให้ผู้ใช้ง่ายขึ้นและไม่ได้แทนที่ทางลัดของเบราว์เซอร์ น่าเสียดายที่ SuperUser ไม่ทำเช่นนี้เนื่องจากเป็นบุคคลเดียวกันกับ FogBugz
Sam

ดูเพิ่มเติมที่superuser.com/questions/399352/…
หอยทากเชิงกล

1
นี้จะถูกกล่าวถึงในคำขอคุณลักษณะนี้ Bugzilla
หอยทากเครื่องกล

ฉันเยี่ยมชมหน้าอินทราเน็ตจำนวนมากที่ทำงานซึ่งทำให้เกิดความสับสนใน cmd + N ดังนั้นฉันจึงไม่สามารถเปิดหน้าต่างเบราว์เซอร์ใหม่จากแป้นพิมพ์ได้! น่ารำคาญมาก!
Nicolas Miari

1
หลังจาก ~ 12 ปี, Mozilla ได้ทำการแก้ไขที่สมเหตุสมผลสำหรับเรื่องนี้ มันถูกซ่อนไว้อย่างดีและไม่สมบูรณ์ แต่มันอาจช่วยให้สติของคุณดีขึ้น โปรดดูคำตอบของฉันที่นี่: superuser.com/a/1317514/158390
Lambart

คำตอบ:


24

ต้องขอบคุณ@run-atคุณสมบัติใหม่ของ Greasemonkey ตอนนี้เป็นไปได้แล้ว!

ผมเอาแรงบันดาลใจจากสคริปต์นี้และสคริปต์นี้จะรวมพวกเขาเป็น UserScript ที่สำเร็จดักแป้นพิมพ์ลัดCtrl+ Tและ+Ctrl 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.cmdKeyและe.cmdKey && e.shiftKeyจะเรียกคืนส่วนใหญ่ของทางลัดเบราว์เซอร์
JamesGecko

สคริปต์นี้ใช้งานได้สำหรับฉันในการแก้ไข CTRL + TAB โดยเพิ่ม9ลงในอาร์เรย์รหัสคีย์ ขอบคุณ!
Mike Mueller

@JamesGecko ค้นพบผ่านคำตอบนี้คุณควร / สามารถใช้ e.metaKey สำหรับคีย์คำสั่ง
riezebosch

3
รหัสนี้ใช้งานได้! โปรดทราบว่ามันกรองไม่เพียง แต่ Ctrl + Key แต่ยังรวมถึง Ctrl + Alt + Key, Ctrl + Shift + Key และ Ctrl + Alt + Shift + Key เพราะมันจะตรวจสอบสถานะของตัวปรับเปลี่ยน Ctrl เท่านั้น
RomanSt

คำถามแรก: สำหรับสคริปต์ที่มีชื่อเสียงในการทำงานกับ Firefox ทำไมมันตรวจสอบว่าเบราว์เซอร์เป็น Opera หรือไม่ และคำถามที่สอง: ความคิดเห็นระบุรหัสตัวอักษรสำหรับ 's' และ 't' แต่รหัสนั้นใช้สำหรับ 'S' และ 'T' ฉันจำเป็นต้องระบุรหัสตัวพิมพ์ใหญ่ด้วยเหตุผลบางอย่างหรือไม่ ขอบคุณ
Douglas Held

8

11 ปีหลังจากยื่นข้อผิดพลาด Mozilla ในที่สุดก็ต้องทำงานตามคำขอฟีเจอร์ที่ได้รับความนิยมนี้และดูเหมือนว่ามันจะทำงานได้ดีในตอนนี้ (ทดสอบใน Firefox 66.0.3 / Ubuntu)

(ขอบคุณ @PerJohansson ที่ชี้ให้เห็นว่าพวกเขาได้ทำให้การตั้งค่าหายากขึ้นตั้งแต่ FF 59)

คุณสามารถปิดการใช้งานทางลัดเว็บไซต์โดยทำตามขั้นตอนเหล่านี้:

  1. คลิกที่(i)ไอคอนในแถบที่ตั้ง
  2. คลิกที่ลูกศรเล็ก ๆ ( >) ทางด้านขวาของรายการสถานะ "การเชื่อมต่อ"
  3. ตอนนี้คุณควรดูMore Informationที่ด้านล่าง คลิกที่นั้นและในที่สุดคุณก็จะได้รับPage Infoกล่องโต้ตอบ
  4. สุดท้ายไปที่Permissionsแท็บและปรับการOverride Keyboard Shortcutsตั้งค่า

นี่คือภาพหน้าจอล่าสุด (พฤษภาคม 2019) สำหรับแต่ละขั้นตอน:

ภาพหน้าจอกล่องโต้ตอบ Firefox Site Info

ภาพหน้าจอข้อความโต้ตอบของ Firefox Site Security

ภาพหน้าจอแท็บการอนุญาตของ Firefox

หากคุณสนใจประวัติของการแก้ไขนี้ต่อไปนี้เป็นตั๋ว Mozilla ที่เกี่ยวข้อง: https://bugzilla.mozilla.org/show_bug.cgi?id=380637และ https://bugzilla.mozilla.org/show_bug.cgi ? id = 1445942


2
ใน Firefox 64 (ไม่แน่ใจว่าจะปรากฏที่ใด) คุณจะต้องคลิกที่ "การเชื่อมต่อ" => "ข้อมูลเพิ่มเติม" เพื่อเข้าถึงกล่องไอดอลนี้ ล้อเฟืองอนุญาตจะเข้าสู่การตั้งค่าแทนซึ่งไม่ถูกต้อง
ต่อ Johansson

ขอบคุณ @PerJohansson ฉันได้อัปเดตตั๋วแล้ว
Lambart

อะไรคือabout:configตัวเลือกที่จะเปลี่ยนค่าเริ่มต้นหรือไม่ ฉันต้องการบังคับให้ทุกไซต์ไม่สามารถเชื่อมต่อกับแป้นพิมพ์ของฉัน
inetknght

5

การวิจัยอย่างกว้างขวางแสดงให้เห็นว่าในฐานะของ Firefox รุ่นปัจจุบัน (3.6.x) สิ่งนี้เป็นไปไม่ได้ - ความขัดแย้งในการเชื่อมโยงกุญแจทั้งหมดได้รับการแก้ไขตามลำดับความสำคัญ: ระบบ> เว็บไซต์> Firefox - ลำดับที่ค่อนข้างโง่นั่นคือ ไม่มีแอดออนที่ฉันลองใช้ดูเหมือนจะสามารถแก้ไขได้

อาจเป็นไปได้ในรุ่นอนาคต แต่ตอนนี้คำตอบคือ - เป็นไปไม่ได้


1
ใช้ FF 30.0 เกือบ 4 ปีต่อมาและนี่ยังเป็นปัญหาอยู่ ฉันจะลองแนวคิด Greasemonkey ของ Martin
LGT

2
ใช้ FF 53.0 เกือบ 8 ปีต่อมาและนี่ยังเป็นปัญหาอยู่
Daniel

5

เนื่องจากปัญหาดูเหมือนว่าจะเป็นเหตุการณ์แป้นพิมพ์ JavaScript ที่ขโมยแป้นพิมพ์จึงเป็นไปไม่ได้ที่จะสร้างสคริปต์ JavaScript (ใช้ผ่าน Greasemonkey) เพื่อยกเลิกการเชื่อมโยงกิจกรรมแป้นพิมพ์เหล่านี้ทั้งหมด

ฉันไม่แน่ใจว่าเป็นไปได้อย่างไร แต่คนที่มี JavaScript / Greasemonkey Experance มากกว่านี้อาจช่วยได้ (อาจคุ้มค่าที่จะถาม SO)


2
สิ่งนี้ทำงานผ่านกลไกการกดแป้นพิมพ์ - Firefox จะส่งปุ่มกดทุกครั้งไปยังเว็บไซต์ก่อนและดูเฉพาะในภายหลังเท่านั้นหากไม่ได้ถูกยกเลิกหรือถูกดัก Greasemonkey magic บางตัวที่จะสกัดกั้นการกดแป้นก่อนหน้าเว็บไซต์และอาจใช้งานฟังก์ชัน firefox โดยตรงก็ได้ แต่ก็ยังไม่ชัดเจน
taw

4

ปัญหาคือหน้าใด ๆ สามารถเรียกใช้ Javascript ที่ตั้งค่าตัวจัดการเหตุการณ์เพื่อจับเหตุการณ์ keypress และการควบคุมจาวาสคริปต์ของ Firefox นั้นไม่เพียงพอที่จะหยุดการทำงานโดยไม่ทำให้คุณสมบัติจาวาสคริปต์อื่นเสียหาย

วิธีเดียวในการป้องกันสิ่งนี้คือการปิดการใช้งาน Javascript (เครื่องมือ -> ตัวเลือก, แท็บ [เนื้อหา] ให้ยกเลิกการเลือกเปิดใช้งาน JavaScript ) หรือคุณสามารถปิดการใช้งาน Javascript ในแต่ละไซต์ด้วยส่วนขยายอย่าง NoScript

Firefox ช่วยให้คุณป้องกันการใช้งาน Javascript บางอย่างเช่นการย้าย / การปรับขนาดหน้าต่างการเปลี่ยนหรือปิดใช้งานเมนูบริบท ฯลฯ แต่ไม่มีสิ่งใดที่จะป้องกันเว็บไซต์ที่ขัดขวางเหตุการณ์แป้นพิมพ์

อาจมีส่วนขยายที่ให้การควบคุมในระดับนี้ - ฉันไม่รู้จักเลย
มีตัวเลือก Javascript อยู่แต่ไม่มีการอัปเดตส่วนขยายอีกต่อไป


2
ตัวเลือก Javascript และส่วนขยายอื่น ๆ ที่ฉันพยายามไม่สนับสนุน การปิดกั้นจาวาสคริปต์ทั้งหมดจะทำให้เว็บใช้งานไม่ได้จริง ๆ นี่ไม่ใช่ตัวเลือกจริงๆ
Taw

0

เป็นไปได้ว่าปลั๊กอินของบุคคลที่สามกำลังให้ความสนใจจากหน้าต่างเบราว์เซอร์หลัก ในกรณีนั้นคีย์บอร์ด (ยกเว้นอินเตอร์รัปต์) จะถูกดักโดยปลั๊กอิน หากคุณไม่ชอบสิ่งนี้คุณสามารถลบปลั๊กอินที่ละเมิดได้ตลอดเวลา [ฉันคิดว่าน่าจะเป็นแฟลช]


3
Flash ทำเช่นกัน แต่ Javascript ธรรมดาสามารถขโมยทางลัดได้ เริ่มคำถามใหม่ที่นี่และกด Cmd-L (Ctrl-L สำหรับผู้ที่ไม่ใช่ Mac) ในขณะที่อยู่ในหน้าต่างข้อความคำถาม แทนที่จะไปที่แถบ url อย่างที่ควรจะเป็นทางลัดจะถูกขโมยและคุณจะเห็นข้อความแทรกการเชื่อมโยงหลายมิติ เคยเป็นของหายาก แต่มีเว็บไซต์จำนวนมากที่เริ่มทำเมื่อไม่นานมานี้
taw

ฉันเพิ่งลองใช้งานบน Windows 7 ที่ใช้ Firefox และฉันกระโดดไปยังแถบที่อยู่โดยตรงตามปกติ
Daisetsu

ขออภัยฉันไม่ชัดเจน - สิ่งนี้จะเกิดขึ้นเฉพาะเมื่อมีการเลือกกล่องโต้ตอบกล่องข้อความสมบูรณ์ คุณทำเช่นนั้น? ฉันทดสอบใน OSX ด้วย Firefox, Opera, Safari และ Chrome โดยปกติแล้วทั้งสี่ Cmd-L จะกระโดดไปที่ url bar (และ Ctrl-L ไม่ทำอะไรเลย) เมื่อแก้ไขเนื้อหาคำถามทั้ง Cmd-L และ Ctrl-L แสดงกล่องโต้ตอบแทรกไฮเปอร์ลิงก์แทน
taw

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

ปัญหาไม่ได้อยู่กับปลั๊กอิน ปลั๊กอินเป็นปัญหาแยกต่างหากด้วยตัวเอง และปัญหาที่แตกต่างกันหลังจากทั้งหมด ในปลั๊กอินโฟกัสทั้งหมดจะถูกขโมยโดยปลั๊กอินเนื่องจากเป็นเอนทิตีแยกต่างหาก ด้วย JavaScript firefox UI คือ JavaScript และมีการเชื่อมโยงของตัวเอง แต่ไซต์สามารถกำหนดการผูกที่อยู่ในระดับเดียวกัน จนถึงตอนนี้ยังไม่มีกลไกในการป้องกันสิ่งนี้
njsg

0

หลังจากการทดสอบบนเบราว์เซอร์ต่าง ๆ เป็นจำนวนมากจะเป็นการง่ายกว่าที่จะสกัดกั้นคีย์เมื่อเบราว์เซอร์หยุดทำงาน (ไม่ได้กด) เนื่องจากบางส่วนของ "คีย์ที่รวมในแอพ" บางตัวนั้นยากที่จะสกัดกั้นด้วยเหตุการณ์ "keypress"

ฉันมากับสคริปต์นี้ที่เข้ากันได้กับเบราว์เซอร์ข้าม (ฉันไม่ได้ทดสอบ IE ของ Microsoft) ขอให้สังเกตว่าเบราว์เซอร์ส่งคืนรหัสที่แตกต่างกันสำหรับบางคีย์ ในกรณีของฉันฉันต้องการป้องกัน Ctrl + P

ปุ่ม "P" บนโครเมียมถูกมองว่าเป็นe.keyCode == 80โอเปร่าe.charCode == 16ในขณะที่อยู่บน 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();
    }  
});

ฉันใช้ jQuery


0

หากคุณต้องการปิดการใช้งานctrl-key ใด ๆ ที่ถูกครอบครองโดยหน้าเว็บเพียงกรองรหัสทั้งหมดของตัวอักษรจาก 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 ซึ่งเป็นหนึ่งในโปรแกรมเหล่านั้นและถ้าคุณสามารถทำคอมโบฮอตคีย์และเชื่อมโยงมันเข้ากับฟังก์ชั่น Firefox ได้

Ctrl-; T ไปที่แท็บใหม่

Ctrl-; N ไปที่หน้าต่างใหม่และอื่น ๆ

ฉันไม่รู้วิธีใช้ Autohotkey หรือ Autoit ดังนั้นคนอื่นจะต้องตรวจสอบว่าสิ่งนี้สามารถใช้งานได้ฉันเสนอสิ่งนี้เป็นแนวคิดที่เป็นไปได้เท่านั้น


-2

Firefox เวอร์ชันปัจจุบันช่วยให้เรา "ปิดการใช้งานจาวาสคริปต์เพื่อจี้เมนูบริบท":

เครื่องมือ / ตัวเลือก / เนื้อหา / เปิดใช้งาน Javascript Advanced / Disable หรือแทนที่เมนูบริบท

แต่ไม่มีคุณสมบัติในการ "ปิดการใช้งานจาวาสคริปต์เพื่อจี้แป้นพิมพ์ลัด"

PS ฉันเกลียดเว็บไซต์ทวิตเตอร์แป้นพิมพ์ลัดของมันขัดแย้งกับแป้นพิมพ์ลัดระบบของฉัน: 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.