PreventDefault 会阻止 Mac 上 Firefox 中的右键单击菜单,但不会阻止 Windows

发布于 2024-12-05 15:58:51 字数 498 浏览 0 评论 0原文

我有一个 Web 应用程序,其中连接了鼠标向上和鼠标向下事件;我使用它们来选择和操作我的应用程序作为编辑器的图形语言。为了防止显示 Firefox 提供的右键单击/上下文菜单,我

if (evt.preventDefault) {
  evt.preventDefault();
}

在每个鼠标向上和鼠标向下事件处理程序的顶部放置了:。我不想返回 false;我实际上希望该事件传播。

在Mac上,右键菜单不显示;这就是我所期望的。然而,在 Windows 上,即使 Firebug 确认我对“preventDefault”的调用正在发生,并且同样“defaultPrevented”被设置为 true,它仍然顽固地出现。

知道有什么吗?还有其他人遇到过这个问题吗?我在 Mac 和 Windows 上运行 Firefox 6.0.2。

[更新:最新版本的 Firefox 在 Mac 和 Windows 上产生了一致的结果:上下文菜单在两个平台上都无法被抑制。]

I have a web application in which I have hooked mouse up and mouse down events; I use them for selection and manipulation of the graphical language for which my application is an editor. To prevent the right-click/context menu supplied by Firefox from showing up, I've placed:

if (evt.preventDefault) {
  evt.preventDefault();
}

at the top of each of my mouse up and mouse down event handlers. I don't want to return false; I actually want the event to propagate.

On the Mac, the right-click menu doesn't show up; this is what I expect. On Windows, however, it stubbornly appears, even though Firebug confirms that my call to "preventDefault" is occurring and likewise "defaultPrevented" gets set to true.

Any idea what gives? Has anyone else run across this problem? I'm running Firefox 6.0.2 on both the Mac and Windows.

[Update: more recent versions of Firefox yielded consistent results on Mac and Windows: the context menu failed to be suppressed on both platforms.]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

草莓味的萝莉 2024-12-12 15:58:51

好的。把这个问题搁置一旁,反复思考之后,我终于找到了解决办法。

尝试处理各种鼠标侦听器中上下文菜单的外观似乎存在根本缺陷。相反,多亏了我在这里找到的代码,我被放在 contextmenu 事件的气味中。该事件似乎是处理事情的正确方法,尽管该网站上实际发布的代码并没有达到目的——仅仅调用“stopPropagation”并返回 false 是不够的。

以下对我有用:

element.addEventListener('contextmenu', function(evt) { 
  evt.preventDefault();
}, false);

这已经在 Mac 上的 Firefox 10.0 和 Windows 7 上的 Firefox 9.0.1 和 10.0 上进行了测试。

Okay. After putting this aside and returning to it several times, I finally found the solution.

Attempting to deal with the appearance of the context menu in the various mouse listeners appears to be fundamentally flawed. Instead, thanks to code I found here, I was put on the scent of the contextmenu event. That event appears to be the right way to handle things, although the code actually posted on that site didn't do the trick — merely calling "stopPropagation" and returning false was insufficient.

The following worked for me:

element.addEventListener('contextmenu', function(evt) { 
  evt.preventDefault();
}, false);

This has been tested with Firefox 10.0 on a Mac and Firefox 9.0.1 and 10.0 on Windows 7.

浪推晚风 2024-12-12 15:58:51

该选项在 Mozilla 的第 23 版中被删除。

This option is removed in Mozilla's 23rd version.

奢欲 2024-12-12 15:58:51
  1. 转到工具>选项。
  2. 转到内容选项卡。
  3. 单击启用 JavaScript 选项旁边的高级按钮。
  4. 禁用或替换上下文菜单。选中此框,它将再次神奇地工作。

JavaScript 中无法绕过此设置。

  1. Go to Tools > Options.
  2. Go to the Content tab.
  3. Click Advanced button next to Enable JavaScript option.
  4. Disable or replace context menus. Check this box and it will magically work again.

There is no way to get around this setting in JavaScript.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文