javascript - Firefox 在禁用输入时直接通过 DOM 根传播上下文菜单事件

标签 javascript firefox dom-events

我正在尝试禁用上下文菜单。为此,我在 bodystopPropagationpreventDefault。除了在 Firefox 中禁用 input 元素之外,这工作正常。

启用的 input 元素可以正确地将事件冒泡到正文,但禁用的元素允许显示右键菜单。我确信事件会直接发送到 DOM 上层的内容,但我尝试将监听器附加到 documentwindow 上,但没有成功。

document.body.addEventListener("contextmenu", e => {
    e.preventDefault();
    e.stopPropagation();
    console.log("context menu blocked at body");
});

Array.from(document.querySelectorAll("input"))
    .forEach(input => {
        input.addEventListener("contextmenu", e => {
            e.preventDefault();
            e.stopPropagation();
            console.log("context menu blocked at input");
        });
    });
body, html {
    width: 100%;
    height: 100%;
    margin: 0;
}
<input type="text" value="I am disabled" disabled />
<input type="text" value="I am not disabled" />

我还尝试将阻塞事件监听器添加到页面上的输入。启用后按预期工作;残疾人的行为没有任何变化。

Chromium/Webkit 浏览器(Chrome、Safari、Brave)中似乎不存在此行为。

有什么方法可以阻止 Firefox 中禁用的输入元素上的上下文菜单吗?是否有更高级别的 DOM 元素可以附加我的阻止监听器以捕获所有失败事件?

最佳答案

虽然您无法在 Firefox 中禁用禁用输入上的上下文菜单,但您可以使用 CSS 执行 99% 相同的操作来完全阻止鼠标交互:

输入:禁用{ 指针事件:无; }

关于javascript - Firefox 在禁用输入时直接通过 DOM 根传播上下文菜单事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63691115/

相关文章:

linux - Headless Firefox 和 Geb/Selenium 的登录问题

jquery - 动画 scrollTop 在 firefox 中不起作用

dom - (PureScript) 如何在 Eff 以外的单子(monad)上下文中运行 DOM 事件监听器回调?

javascript - Facebook 爬虫目前是否在解析 DOM 之前解释 javascript?

javascript - 单击菜单栏时 JScript 隐藏 Logo

javascript - 使 <a> 元素内的 span 具有独立链接

javascript - 无法弹出完整的文字

javascript - 显示自上次点击以来经过了多长时间?

html - 导航链接在 Chrome 和 Firefox 中不起作用

javascript - 从外部触发 Raphael 事件