右键菜单怎么阻止默认浏览器菜单弹出?
我在做一个自定义的右键菜单功能,绑定了 contextmenu 事件,也调用了 preventDefault(),但有时候还是会弹出浏览器默认的右键菜单,尤其是在某些元素上。是不是我哪里没处理对?
我的代码大概是这样:
document.addEventListener('contextmenu', (e) => {
e.preventDefault();
showCustomMenu(e.clientX, e.clientY);
});
在 Chrome 和 Edge 上测试,偶尔还是会闪一下原生菜单,特别是在快速点击或焦点切换的时候。有没有更稳妥的写法?
改成在捕获阶段拦截会更稳妥:
另外,如果页面里有 input、textarea 或者 contenteditable 的元素,这些元素右键通常有特殊行为(比如复制粘贴),需要在这些元素上也阻止:
还有一种情况是第三方库(比如某些 UI 框架)可能已经绑定了 contextmenu 事件并且先执行了。你可以检查一下页面有没有这类依赖。
如果还是偶尔闪一下,可以试试把 preventDefault 放在事件处理的最开头,越早越好。
希望能帮到你!