【问题标题】:How can a Firefox XUL-addon prevent websites from stealing keypress events?Firefox XUL 插件如何防止网站窃取按键事件?
【发布时间】:2016-05-24 17:45:31
【问题描述】:

我使用了一个稍微修改过的 Firemacs 版本,它是一个“旧”的基于 XUL 的 Firefox 插件。要监视 keypress 事件,插件会创建一个 <overlay> 并获取一个脚本,该脚本使用:

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

但是,网站可能会“窃取”事件。例如,在 SO 的问题文本框中,我无法输入 C-b,因为它与某些格式存在短路。同样,Facebook 窃取了 很多 键绑定,特别是 C-y,我用它从剪贴板粘贴。

问题:如何修改插件,使其始终首先捕获按键事件?
额外:这个<overlay> 是如何被覆盖的?

【问题讨论】:

    标签: javascript firefox-addon keypress dom-events xul


    【解决方案1】:

    您需要使用 keydownkeyup 并阻止它们。按键响应keydown,后跟keyup。你会注意到它第 3 次触发。因此,如果您阻止 key down 在window.addEventListener('keydown', func, true); 中使用e.stopPropagation(); e.preventDefault 传播,它应该阻止它。

    【讨论】:

    • 啊,有趣!现在,我确实喜欢keypress 的舒适性,它的event.which 清楚地说明了按下的键。但是,如果我只是将keydown 侦听器添加到stopPropagation,那么我无法在浏览器中输入任何内容。因此,我唯一的选择是在keydown 中编码所有内容,将keyCodes 转换为字符吗?非常感谢!
    • @Michaël 你也可以阻止keyup 以防止keypress 触发我认为。
    • 我不确定我是否理解这一点。让我总结一下:如果我使用keypress,Facebook(比如说)不会将事件传递给我的插件(我不知道如何,特别是我不知道他们是否实现@ 987654336@ 或 keypress)。因此我必须对keydown某事。如果我用stopPropagationpreventDefault 一直 完全停止keydown 事件,那么我只剩下一个无用的浏览器了。因此在我看来,我必须在keydown 中实现插件,摆弄不稳定的键码到字符的转换。你是说你看到了替代方案吗?非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    相关资源
    最近更新 更多