我是否可以在网页上禁用右键菜单而不使用JavaScript?我之所以这样问是因为大多数浏览器允许用户禁用JavaScript。
如果不行,我该如何使用JavaScript禁用右键菜单?
我是否可以在网页上禁用右键菜单而不使用JavaScript?我之所以这样问是因为大多数浏览器允许用户禁用JavaScript。
如果不行,我该如何使用JavaScript禁用右键菜单?
你可以使用JavaScript通过添加一个"contextmenu"事件监听器并调用preventDefault()
方法来实现:
document.addEventListener('contextmenu', event => event.preventDefault());
话虽如此:不要这样做。
为什么?因为这只会让用户感到恼怒,除此之外没有任何好处。而且很多浏览器都有一个安全选项来禁止禁用右键(上下文)菜单。
不确定你为什么想这样做。如果出于一些错误的信念以为可以通过这种方式保护你的源代码或图像,请再思考一下:你是做不到的。
oncontextmenu="return false"
可能是有意义的,例如在 canvas 上。 - AdrienBrault不要这样做
无论你做什么,都不能阻止用户访问你网站上的每一位数据。你编写的任何JavaScript代码都可以通过在浏览器中关闭JavaScript(或使用像NoScript这样的插件)来使其无效。此外,没有办法禁用任何用户只需通过“查看源代码”、“查看页面信息”(或使用wget)来访问你网站的能力。
这样做没有任何意义。它实际上是对用户进行敌意行为。他们会注意到这一点并停止访问。这样做没有任何好处,只是浪费时间和失去流量。
别这样做。
更新:随着时间的推移,这个小问题似乎已经引起了很大的争议。即便如此,我仍然坚持我对这个问题的回答。有时正确的回答是建议而不是逐字回应。
希望通过这个问题找出如何创建自定义上下文菜单的人应该寻找其他地方,例如这些问题:
原问题是关于如何阻止鼠标右键点击的,考虑到用户可能禁用JavaScript:这听起来有点不正当和邪恶(因此会得到负面回应) - 但所有重复的问题都被重定向到这里,尽管其中许多重复的问题是为了更少邪恶的目的而提出的。
比如在HTML5游戏中使用右键按钮,可以使用上面的内联代码实现,或者更好一点的方式是这样:
document.addEventListener("contextmenu", function (e){
e.preventDefault();
}, false);
但是如果你正在制作游戏,那么请记住,右键按钮会触发 contextmenu
事件-但它也会触发常规的 mousedown
和 mouseup
事件。因此,您需要检查事件的 which 属性,以查看是左键 (which === 1
)、中间键 (which === 2
) 还是右键 (which === 3
) 触发了该事件。
这里有一个 jQuery 的示例-请注意,按下鼠标右键将触发三个事件: mousedown
事件, contextmenu
事件和 mouseup
事件。
// With jQuery
$(document).on({
"contextmenu": function (e) {
console.log("ctx menu button:", e.which);
// Stop the context menu
e.preventDefault();
},
"mousedown": function(e) {
console.log("normal mouse down:", e.which);
},
"mouseup": function(e) {
console.log("normal mouse up:", e.which);
}
});
如果你在游戏中使用鼠标的左右键,那么你需要在鼠标事件处理程序中进行一些条件逻辑判断。
如果您不希望每次用户尝试右键单击时都弹出提示消息,请尝试将以下内容添加到您的 body 标签中。
<body oncontextmenu="return false;">
这将阻止所有对上下文菜单的访问(不仅限于右键,还包括从键盘)。
然而,正如其他答案中所提到的,添加右键禁用程序确实没有任何意义。任何具备基本浏览器知识的人都可以查看源代码并提取他们需要的信息。
$(function() {
$(this).bind("contextmenu", function(e) {
e.preventDefault();
});
});
this
?为什么要使用bind
而不是on
? - Rudeydocument.addEventListener("contextmenu", function(e){
if (e.target.nodeName === "IMG") {
e.preventDefault();
}
}, false);
这只是为了防止最简单的图像保存方式,但仍然可以完成。
首先,要实现这一点,您需要使用客户端功能。这是JavaScript运行的地方。
其次,如果您试图控制最终用户从您的站点消费的内容,则需要重新考虑如何显示该信息。图像具有公共URL,可以通过HTTP获取,而无需浏览器。
身份验证可以控制谁有权访问哪些资源。
嵌入式水印可以证明该图像来自特定的个人/公司。
归根结底,资源管理实际上是用户/访客管理。
互联网的第一条规则是,如果您不希望它被拿走,请不要将其公开!
互联网的第二个规则是,如果您不希望它被拿走,请不要放在互联网上!
如果你的目的是防止人们下载你的图片,正如大多数人所说的那样,禁用右键基本上是无效的。
假设你正在尝试保护图片,替代方法包括-
使用Flash播放器,用户无法直接下载它们,但他们可以轻松地进行屏幕截图。
如果你想变得更加棘手,将图片作为div的背景,其中包含一个透明的图片,就像这样 -
<div style="background-image: url(YourImage.jpg);">
<img src="transparent.gif"/>
</div>
这将足以阻止随意盗用您的图片(请参见下面的示例),但与所有这些技术一样,只要具备基本的HTML理解,就可以轻松地克服。
如果不使用Javascript,您将无法完成所需的操作。您选择使用的任何其他技术只能帮助组合在服务器端发送到浏览器的网页。
没有好的解决方案,也没有不使用Javascript的解决方案。