2

我想在我正在处理的网站上实现自定义上下文菜单。我使用了 document.oncontextmenu,它适用于除 Opera 之外的所有我正在开发的主要浏览器。我将如何在 Opera 中获得相同的结果?我需要禁用默认上下文菜单并显示我的。

我想做的第一件事是点击鼠标右键,因为 Opera 无法识别 document.body.onmousedown ......

谢谢,R。

4

4 回答 4

3

做了一些研究,我在一个 jQuery上下文菜单插件上发现了一个有趣的小花絮

*Opera 9.5 有一个允许脚本检测右键单击的选项,但默认情况下它是禁用的。此外,Opera 仍然不允许 JavaScript 禁用浏览器的默认上下文菜单,这会导致可用性冲突。

在opera.linux 谷歌组中发现了另一个有趣的点,它可能会引导你朝着正确的方向前进

Opera 不支持oncontextmenu这些脚本使用的 javascript 事件。Opera 确实支持 onrightclick,但如您所见,默认情况下它是禁用的。我们的开发人员过去曾告诉我,实现支持并不像为设置oncontextmenu别名那么简单onrightclick,前者显然做得更多。

...并且此代码段event.button用于测试右键单击...

          addEventListener('mouseup',function(e){
                    if( e && e.button == 2 ){
                            document.write('a');
                            return false;
                    }
            },true); 

然而,这些解决方案都不会给你你想要的(基于第一个引用的部分)......似乎 Opera 认为右键单击网页应该始终为用户提供“标准”上下文菜单。

于 2009-12-12T05:56:37.663 回答
1

我相信 Opera 故意没有将右键单击传递给脚本。我猜有太多网站在右键单击时会弹出愚蠢的“复制保护”消息。

我假设更改(右键单击-> 编辑站点首选项-> 脚本-> 允许脚本检测上下文菜单事件)使 Opera 的行为符合您的预期?

于 2009-12-09T00:48:43.300 回答
1

uTorrent Web UI 以某种方式在歌剧中右键单击时显示自定义上下文菜单。您可以查看其来源以了解其实施方式。

于 2009-12-11T07:10:00.910 回答
1

简而言之:您必须在 Opera 的设置中启用首选项,并且尚不支持 oncontextmenu,因此您必须监听 mousedown 或 click 事件。

某些脚本在启用首选项时使用(非常丑陋的)hack 来禁用 Opera 自己的上下文菜单:从 mousedown 事件中,创建一个不可见的 <input type=button> 元素并将其放置在单击发生的位置。因为 Opera 没有按钮的右键菜单,所以它的内部菜单不会出现。正如我所说,它非常丑陋:-p

适当的 oncontextmenu 支持应该会出现在 Opera 的下一个发行版本中——当然不包括次要的稳定性和安全更新。如果您不喜欢丑陋的解决方法,请等待它..

于 2009-12-14T18:46:30.500 回答