如何禁用右键单击我的网页?

IT技术 javascript
2021-01-15 08:24:08

我可以在不使用 JavaScript 的情况下禁用右键单击我的网页吗?我问这个是因为大多数浏览器允许用户禁用 JavaScript。

如果没有,如何使用 JavaScript 禁用右键单击?

6个回答

您可以通过 JavaScript 为“contextmenu”事件添加一个事件侦听器并调用该preventDefault()方法:

document.addEventListener('contextmenu', event => event.preventDefault());

话虽如此:不要这样做。

为什么?因为它除了烦人的用户之外别无他物。此外,许多浏览器都有一个安全选项,禁止禁用右键单击(上下文)菜单。

不知道你为什么想要。如果是出于某种错误的信念,认为您可以通过这种方式保护源代码或图像,请再想一想:您不能。

我们正在部署到信息亭机器上并选择这种方式来禁止用户刷新页面。
2021-03-11 08:24:08
Old Thread 但如果有人阅读它,并非所有 Web 开发人员都为自己制作网站,有时客户会来找您并坚持禁用右键单击,当您试图说服他时,他只会寻找另一个会这样做的开发人员不加思索
2021-03-12 08:24:08
oncontextmenu="return false"在身体以外的其他东西上使用可能是有意义的,例如在画布上。
2021-03-19 08:24:08
@ToddHorst 在这种情况下,我会使用没有任何 UI 的特殊“Kiosk”浏览器版本,通常也可以在没有任何上下文菜单的情况下使用 :)
2021-03-20 08:24:08
支持触摸的系统有时会将某些触摸事件(例如长按)映射到右键单击(从而打开上下文菜单)。然而,这种行为可能是不受欢迎的,唯一有意义的防止它的方法似乎是完全禁用上下文菜单。
2021-03-30 08:24:08

只是,不要。

无论您做什么,都无法阻止用户完全访问您网站上的每一点数据。只需关闭浏览器上的 Javascript(或使用 NoScript 等插件),您编写的任何 Javascript 都可以变得没有实际意义。此外,无法禁用任何用户为您的网站简单地“查看源代码”或“查看页面信息”(或使用 wget)的能力。

这不值得付出努力。它实际上不会起作用。它会使您的网站对用户产生积极的敌意。他们会注意到这一点并停止访问。这样做没有任何好处,只会浪费精力和丢失流量。

别。

更新:随着时间的推移,这个小话题似乎引起了很大争议。即便如此,我仍然支持这个问题的答案。有时正确的答案是建议而不是字面上的回应。

偶然发现这个问题并希望找出如何创建自定义上下文菜单的人应该看看其他地方,例如这些问题:

真正的答案应该是: <body oncontextmenu="return false;">
2021-03-11 08:24:08
如果用户想要制作 HTML5 视频游戏,禁用右键单击可能非常有用。通常,这是不可取的,但是在没有适当上下文的情况下仅说“不要”并没有多大帮助。
2021-03-11 08:24:08
哇,我不敢相信这是一个可以接受的答案。在特定条件下删除 web 应用程序中的右键单击有许多有效的用途。
2021-03-13 08:24:08
-1也来自我。这个答案没有帮助。禁用右键单击有很多充分的理由。例如,我创建了一个医院前台使用的Web应用程序,而用户并不精通技术。即使应用程序在他们的 Web 浏览器中运行,他们也不明白为什么当他们右键单击时会出现所有菜单选项。我们收到了大量帮助问题,询问我们这些选项的用途,来自认为他们是应用程序一部分的人。在这种情况下禁用它们是有意义的,并且在许多其他 Web 应用程序中也是如此。
2021-03-13 08:24:08
@GAgnew:可以有效地替换上下文菜单。没有有效的用户可以无条件地禁用右键单击并且不以有用的方式处理它们-
2021-04-01 08:24:08

最初的问题是关于如何在用户可以禁用 JavaScript 的情况下停止右键单击:这听起来邪恶和邪恶(因此是负面响应) - 但所有重复项都重定向到这里,即使许多重复项要求不那么邪恶的目的。

例如在 HTML5 游戏中使用右键单击按钮。这可以通过上面的内联代码来完成,或者更好一点是这样的:

document.addEventListener("contextmenu", function(e){
    e.preventDefault();
}, false);

但是如果您正在制作游戏,请记住右键单击按钮会触发contextmenu事件 - 但它也会触发常规的mousedownmouseup事件。因此,您需要检查事件的which属性,以查看它是触发事件的鼠标左键(哪个 === 1)、中间(哪个 === 2)或右键(哪个 === 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); 
    }
});

因此,如果您在游戏中使用鼠标左键和右键,则必须在鼠标处理程序中执行一些条件逻辑。

如果我dom.event.contextmenu.enabled在 Firefox 中启用即使没有mousedownmouseup事件仍会触发contextmenu吗?
2021-03-13 08:24:08

如果您不关心每次尝试右键单击时用消息提醒用户,请尝试将其添加到您的正文标签中

<body oncontextmenu="return false;">

这将阻止对上下文菜单的所有访问(不仅从鼠标右键,而且从键盘)。

但是,正如其他答案中所述,添加右键单击禁用程序确实没有意义。任何具有基本浏览器知识的人都可以查看源并提取他们需要的信息。

@WillO:我有一个类似的用例需要满足,但仅供参考,用户总是会求助于屏幕截图
2021-03-16 08:24:08
谢谢!这是我找到的最简单的方法。
2021-03-17 08:24:08
支持触摸的系统有时会将某些触摸事件(例如长按)映射到右键单击(从而打开上下文菜单)。然而,这种行为可能是不受欢迎的,唯一有意义的防止它的方法似乎是完全禁用上下文菜单。
2021-03-25 08:24:08
是的,但有时我想与我知道缺乏基本浏览器知识的人简要分享图像。禁用右键单击并不是 100% 万无一失,但如果我只发布几分钟的图像让那个人看看,这是非常安全的。
2021-03-28 08:24:08

如果你是 jquery 的粉丝,请使用这个

    $(function() {
        $(this).bind("contextmenu", function(e) {
            e.preventDefault();
        });
    }); 
这是无缘无故地使用jQuery。这与演讲者先生的回答中找到的单个 JavaScript 语句完全相同,该语句是在此之前 1.5 年发布的。顺便说一句,该答案还包括一个 jQuery 解决方案,您也不需要它。有谁赞成这个答案的人甚至知道这是做什么的?为什么这会等待文档就绪事件停止阻止上下文菜单出现?为什么this在 ready 事件中使用它?你为什么用bind而不是on啊...
2021-03-11 08:24:08