我可以在不使用 JavaScript 的情况下禁用右键单击我的网页吗?我问这个是因为大多数浏览器允许用户禁用 JavaScript。
如果没有,如何使用 JavaScript 禁用右键单击?
我可以在不使用 JavaScript 的情况下禁用右键单击我的网页吗?我问这个是因为大多数浏览器允许用户禁用 JavaScript。
如果没有,如何使用 JavaScript 禁用右键单击?
您可以通过 JavaScript 为“contextmenu”事件添加一个事件侦听器并调用该preventDefault()
方法:
document.addEventListener('contextmenu', event => event.preventDefault());
话虽如此:不要这样做。
为什么?因为它除了烦人的用户之外别无他物。此外,许多浏览器都有一个安全选项,禁止禁用右键单击(上下文)菜单。
不知道你为什么想要。如果是出于某种错误的信念,认为您可以通过这种方式保护源代码或图像,请再想一想:您不能。
别
只是,不要。
无论您做什么,都无法阻止用户完全访问您网站上的每一点数据。只需关闭浏览器上的 Javascript(或使用 NoScript 等插件),您编写的任何 Javascript 都可以变得没有实际意义。此外,无法禁用任何用户为您的网站简单地“查看源代码”或“查看页面信息”(或使用 wget)的能力。
这不值得付出努力。它实际上不会起作用。它会使您的网站对用户产生积极的敌意。他们会注意到这一点并停止访问。这样做没有任何好处,只会浪费精力和丢失流量。
别。
更新:随着时间的推移,这个小话题似乎引起了很大争议。即便如此,我仍然支持这个问题的答案。有时正确的答案是建议而不是字面上的回应。
偶然发现这个问题并希望找出如何创建自定义上下文菜单的人应该看看其他地方,例如这些问题:
最初的问题是关于如何在用户可以禁用 JavaScript 的情况下停止右键单击:这听起来邪恶和邪恶(因此是负面响应) - 但所有重复项都重定向到这里,即使许多重复项要求不那么邪恶的目的。
例如在 HTML5 游戏中使用右键单击按钮。这可以通过上面的内联代码来完成,或者更好一点是这样的:
document.addEventListener("contextmenu", function(e){
e.preventDefault();
}, false);
但是如果您正在制作游戏,请记住右键单击按钮会触发contextmenu事件 - 但它也会触发常规的mousedown和mouseup事件。因此,您需要检查事件的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);
}
});
因此,如果您在游戏中使用鼠标左键和右键,则必须在鼠标处理程序中执行一些条件逻辑。
如果您不关心每次尝试右键单击时用消息提醒用户,请尝试将其添加到您的正文标签中
<body oncontextmenu="return false;">
这将阻止对上下文菜单的所有访问(不仅从鼠标右键,而且从键盘)。
但是,正如其他答案中所述,添加右键单击禁用程序确实没有意义。任何具有基本浏览器知识的人都可以查看源并提取他们需要的信息。
如果你是 jquery 的粉丝,请使用这个
$(function() {
$(this).bind("contextmenu", function(e) {
e.preventDefault();
});
});