2016-05-24 21 views
0

Ich verwende eine leicht gehackte Version von Firemacs, einem "alten" XUL-basierten Addon für Firefox. Um keypress Ereignisse zu beobachten, schafft das Plugin einen <overlay> und Quellen ein Skript, das verwendet:Wie kann ein Firefox XUL-Addon Webseiten davon abhalten, Keypress-Events zu stehlen?

window.addEventListener('keypress', handler, true); 

jedoch Websites können „stehlen“ die Ereignisse. Zum Beispiel kann ich in der Fragetextbox von SO nicht C-b eingeben, da es zu einer Formatierung kurzgeschlossen ist. Ebenso stiehlt Facebook eine Los Tastaturbindungen, insbesondere C-y, die ich aus der Zwischenablage einfügen.

Frage: Wie kann ich das Addon so ändern, dass es immer die Tastendruckereignisse zuerst fängt?
Extra: Wie wurde diese <overlay> außer Kraft gesetzt?

Antwort

1

Sie müssen keydown und keyup verwenden und diese verhindern. Ein Tastendruck erfolgt als Antwort auf keydown gefolgt von keyup. Sie werden bemerken, dass es 3. feuert. Wenn Sie also verhindern, dass sich der Schlüssel mit e.stopPropagation(); e.preventDefault in window.addEventListener('keydown', func, true); ausbreitet, sollte er dies blockieren.

+0

Aah, interessant! Jetzt mag ich den Komfort von 'Tastendruck', mit seinem' Ereignis.wischen', das deutlich die gedrückte Taste buchstabiert. Aber wenn ich 'stopPropagation' einfach einen 'keydown'-Listener hinzufüge, kann ich nichts im Browser eingeben. Also, ist meine einzige Option, alles in "keydown" zu codieren und 'keyCode's in chars zu übersetzen? Danke vielmals! –

+0

@ Michaël können Sie die 'keyup' auch blockieren, um zu verhindern, dass' 'keypress' 'ausgelöst wird, denke ich. – Noitidart

+0

Ich bin mir nicht sicher, ob ich das verstehe. Lassen Sie mich zusammenfassen: Wenn ich 'keypress' verwende, wird Facebook (say) das Event nicht an mein Addon weitergeben (ich weiß nicht wie *), insbesondere weiß ich nicht, ob sie' keydown' oder 'keypress implementieren '). Daher muss ich etwas mit "Keydown" machen. Wenn ich die "keydown" -Ereignisse insgesamt mit "stopPropagation" und "preventDefault" * stoppe, dann bleibt mir ein nutzloser Browser. Es scheint mir also, dass ich das Addon in "Keydown" implementieren muss, indem ich an der sprunghaften Umwandlung von Schlüsselcode in Zeichen arbeite. Wollen Sie sagen, dass Sie eine Alternative dazu sehen? Vielen Dank! –