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

时间:2009-04-10 08:12:09

标签: javascript

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

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

29 个答案:

答案 0 :(得分:454)

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

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

话虽如此:不要做。

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

不确定你为什么要这样做。如果出于某种错误的信念,你可以用这种方式保护你的源代码或图像,那就再想一想:你做不到。

答案 1 :(得分:121)

<强>不

就是,不要。

无论您做什么,都无法阻止用户完全访问您网站上的所有数据。您编写的任何Javascript都可以通过简单地在浏览器上关闭Javascript(或使用像NoScript这样的插件)来实现。此外,没有办法禁止任何用户只为您的网站“查看来源”或“查看页面信息”(或使用wget)。

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

别。

更新:随着时间的推移,这个小话题似乎已经证明很有争议。即便如此,我仍然坚持这个问题的答案。有时正确的答案是建议而不是文字回应。

为了找到如何创建自定义上下文菜单而偶然发现这个问题的人应该在其他地方寻找,例如:

答案 2 :(得分:65)

最初的问题是关于如何停止右键单击,因为用户可以禁用JavaScript :这听起来是恶毒和邪恶的(因此是否定的反应) - 但是所有重复都重定向到这里,即使很多重复的要求是为了减少邪恶的目的。

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

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

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

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

答案 3 :(得分:34)

如果您不关心每次用户尝试右键单击时都会向用户发出警告,请尝试将其添加到您的正文标记中

<body oncontextmenu="return false;">

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

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

答案 4 :(得分:27)

如果您是jquery粉丝,请使用此

    $(function() {
        $(this).bind("contextmenu", function(e) {
            e.preventDefault();
        });
    }); 

答案 5 :(得分:20)

如果您的目标是阻止人们下载您的图片,正如大多数人所说的那样,禁用右键点击几乎无效。

假设您正在尝试保护图像,则替代方法是 -

使用Flash播放器,用户无法下载,但他们可以轻松进行屏幕截图。

如果你想更加习惯,可以将图像作为div的背景,包含透明图像,àla -

<div style="background-image: url(YourImage.jpg);">
   <img src="transparent.gif"/>
</div>

足以阻止您的图像随意盗窃(请参阅下面的示例),但与所有这些技术一样,通过对html的基本理解而失败是微不足道的。

答案 6 :(得分:18)

首先,如果不使用客户端功能,则无法实现此目的。这是javascript运行的地方。

其次,如果您尝试控制最终用户可以从您的网站使用的内容,那么您需要重新考虑如何显示该信息。图像有一个公共URL,可以通过HTTP获取而无需浏览器。

身份验证可以控制谁有权访问哪些资源。

图像中的嵌入水印可以证明图像来自特定的人/公司。

在一天结束时,资源管理实际上是用户/客户管理。

互联网的第一条规则,如果你不想要它,不要公开它!

互联网的第二条规则,如果你不想要它,不要把它放在互联网上!

答案 7 :(得分:15)

如果不使用Javascript,您无法完成所要求的内容。您可以选择使用的任何其他技术只能帮助撰写服务器端的网页以发送到浏览器。

没有好的解决方案,没有Javascript就没有解决方案。

答案 8 :(得分:14)

如果您的目标是禁止用户只是保存您的图片,您还可以检查点击的目标是否是图片,只有在这种情况下禁用右键单击。因此,右键单击可用于其他目的。取自上面的代码:

document.addEventListener("contextmenu", function(e){
    if (e.target.nodeName === "IMG") {
        e.preventDefault();
    }
}, false);

这只是为了取消保存图像的最简单方法,但仍可以完成。

答案 9 :(得分:9)

<!DOCTYPE html>
<html>
<head>
<script type='text/javascript' src='http://code.jquery.com/jquery-1.4.4.min.js'></script>
<script type='text/javascript'>//<![CDATA[ 
$(function(){
$('img').bind('contextmenu', function(e){
return false;
}); 
});//]]>  
</script>
</head>
<body>
    <img src="http://www.winergyinc.com/wp-content/uploads/2010/12/ajax.jpg"/>
</body>

答案 10 :(得分:6)

就像下面这样(它也适用于Firefox):

$(document).on("contextmenu",function(e){

     if( e.button == 2 ) {
         e.preventDefault();
          callYourownFucntionOrCodeHere();
     }
return true;
});

答案 11 :(得分:4)

将此代码放入您网页的<head>标记。

<script type="text/javascript"> 
function disableselect(e){  
return false  
}  

function reEnable(){  
return true  
}  

//if IE4+  
document.onselectstart=new Function ("return false")  
document.oncontextmenu=new Function ("return false")  
//if NS6  
if (window.sidebar){  
document.onmousedown=disableselect  
document.onclick=reEnable  
}
</script>

这将禁用对整个网页的右键单击,但仅限于启用JavaScript时。

答案 12 :(得分:4)

当然,根据此处的所有其他评论,这根本不起作用。

我曾经为客户构建了一个简单的Java applet,它强制通过屏幕捕获完成对图像的任何捕获,你可能想要考虑类似的技术。它在限制范围内有效,但我仍然认为这是浪费时间。

答案 13 :(得分:4)

    <script>
        window.oncontextmenu = function () {
            console.log("Right Click Disabled");
            return false;
        }
    </script>

答案 14 :(得分:4)

我已经使用此代码在任何网页上禁用了右键单击,它的工作正常。您可以使用此代码

jQuery(document).ready(function(){
  jQuery(function() {
        jQuery(this).bind("contextmenu", function(event) {
            event.preventDefault();
            alert('Right click disable in this site!!')
        });
    });
});
<html>
  <head>
    <title>Right click disable in web page</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  </head>
  <body>
    You write your own code
  </body>
</html>

答案 15 :(得分:3)

试一下

<script language=JavaScript>
//Disable right mouse click Script

var message="Function Disabled!";

function clickIE4(){
if (event.button==2){
alert(message);
return false;
 }
}

function clickNS4(e){
if (document.layers||document.getElementById&&!document.all){
if (e.which==2||e.which==3){
alert(message);
return false;
}
}
}

if (document.layers){
document.captureEvents(Event.MOUSEDOWN);
document.onmousedown=clickNS4;
}
else if (document.all&&!document.getElementById){
document.onmousedown=clickIE4;
}

document.oncontextmenu=new Function("alert(message);return false")

</script>

答案 16 :(得分:3)

禁用右键单击您的网页很简单。只有几行JavaScript代码可以完成这项工作。以下是JavaScript代码:

$("html").on("contextmenu",function(e){
   return false;
});

在上面的代码中,我选择了标签。在您添加这三行代码后,它将禁用您网页上的右键单击。

来源:Disable right click, copy, cut on web page using jQuery

答案 17 :(得分:2)

我知道我迟到了,但我想为我要提供的答案创建一些假设和解释。

我可以禁用右键单击

  

我可以在不使用Javascript的情况下禁用右键单击我的网页吗?

是的,通过使用JavaScript,您可以禁用任何发生的事件,并且您可以主要仅通过javaScript执行此操作。你需要的是:

  1. 工作硬件

  2. 一个网站或某个地方,您可以从中了解密钥代码。因为你需要它们。

  3. 现在让我们说你想阻止回车键按下这里是代码:

    function prevententer () {
     if(event.keyCode == 13) {
      return false;
     }
    }
    

    右键单击使用:

    event.button == 2
    

    代替event.keyCode。你会阻止它。

      

    我想问这个,因为大多数浏览器允许用户通过Javascript禁用它。

    你是对的,浏览器允许你使用JavaScript,javascript为你完成整个工作。你不需要设置任何东西,只需要头部的脚本属性。

    为什么你不应该禁用它?

    主要和快速的答案是,用户不喜欢。每个人都需要自由,没有人我的意思是没有人想要被阻止或禁用,几分钟前我在一个网站,这阻止了我点击右键,我觉得为什么?您需要保护源代码吗?然后在这里ctrl+shift+J我打开了Console,现在我可以转到HTML-code标签了。来吧,阻止我。这不会为您的应用添加任何安全层。

    右键单击中有很多用户菜单,例如复制,粘贴,搜索Google以查找“文本”(在Chrome中)等等。因此,用户希望轻松访问,而不是记住很多键盘快捷键。任何人都可以复制上下文,保存图像或做任何他想做的事情。

    浏览器使用鼠标导航:某些浏览器(如 Opera )使用鼠标导航,因此如果禁用它,用户肯定会讨厌您的用户界面和脚本。

    所以这是基本的,我打算写一些关于保存源代码的更多信息,但是,让它成为你问题的答案。

    参考密钥代码:

    按键和鼠标按键代码:

    http://www.w3schools.com/jsref/event_button.asp

    https://developer.mozilla.org/en-US/docs/Web/API/event.button(也会得到用户的赞赏)。

    为什么不禁用右键单击:

    http://www.sitepoint.com/dont-disable-right-click/

答案 18 :(得分:2)

 $(document).ready(function () {
            document.oncontextmenu = document.body.oncontextmenu = function () { return false; }
        });

答案 19 :(得分:2)

尝试使用此代码禁用检查元素选项

    jQuery(document).ready(function() {
    function disableSelection(e) {
        if (typeof e.onselectstart != "undefined") e.onselectstart = function() {
            return false
        };
        else if (typeof e.style.MozUserSelect != "undefined") e.style.MozUserSelect = "none";
        else e.onmousedown = function() {
            return false
        };
        e.style.cursor = "default"
    }
    window.onload = function() {
        disableSelection(document.body)
    };

    window.addEventListener("keydown", function(e) {
        if (e.ctrlKey && (e.which == 65 || e.which == 66 || e.which == 67 || e.which == 70 || e.which == 73 || e.which == 80 || e.which == 83 || e.which == 85 || e.which == 86)) {
            e.preventDefault()
        }
    });
    document.keypress = function(e) {
        if (e.ctrlKey && (e.which == 65 || e.which == 66 || e.which == 70 || e.which == 67 || e.which == 73 || e.which == 80 || e.which == 83 || e.which == 85 || e.which == 86)) {}
        return false
    };

    document.onkeydown = function(e) {
        e = e || window.event;
        if (e.keyCode == 123 || e.keyCode == 18) {
            return false
        }
    };

    document.oncontextmenu = function(e) {
        var t = e || window.event;
        var n = t.target || t.srcElement;
        if (n.nodeName != "A") return false
    };
    document.ondragstart = function() {
        return false
    };
});

答案 20 :(得分:1)

如果您使用的是jquery,可以尝试以下代码:

$(document).bind("contextmenu", function (event) {
  event.preventDefault();
));

检查出来:http://www.landcoder.com/4-dynamic-interactive-code-snippets-jquery-705#disablerightclick

答案 21 :(得分:1)

使用Javascript:

document.getElementsByTagName("html")[0].setAttribute("oncontextmenu", "return false"); 

答案 22 :(得分:1)

就这样做

不需要编写 JAVASCRIPT 代码

<body oncontextmenu="return false">

答案 23 :(得分:0)

简单的方法:

<body oncontextmenu="return false" onselectstart="return false" ondragstart="return false">

答案 24 :(得分:0)

是的,您可以使用 html 禁用它。
只需在您的正文或元素上添加 oncontextmenu="return false;"
它非常简单,只使用有效的 HTML,没有 jQuery 或 JS。

答案 25 :(得分:0)

如果您只想禁用右键单击以在网页上保存图像,请使用以下CSS解决方案:

your-img-tag {
  pointer-events: none;
}

在同一图像上实施之前: Before

在同一图像上实施后: After

已测试可以在 Chrome Firefox 中使用。

答案 26 :(得分:0)

需要考虑的几件事:

Chrome浏览器中的“启用右键单击”之类的浏览器插件存在是有原因的,您将无法解决它们。您根本无法采取任何措施来阻止人们下载您的内容,因为他们实际上必须下载内容才能在浏览器中看到它们。人们尝试了,但是总是在那里。

通常,如果内容不应该公开,则不要将其放在网上。

此外,无法右键单击也是可访问性问题,在许多情况下,这会构成对盲人,残疾人或老人的非法歧视。请查看您当地的法律,但是在美国,由于可能有视力问题的盲人或老年人是受法律保护的阶级,因此它以联邦ADA的形式积极地违反法律。

因此,不要这样做,并且浪费大量时间和精力,甚至不必费心尝试这样做。它可能只是让您的公司受到起诉,或者使他们未能通过合规性审核。

答案 27 :(得分:0)

使用此功能可禁用右键单击。您可以禁用左键单击,也可以通过相应的checking 1 and 0进行点击

document.onmousedown = rightclickD;
            function rightclickD(e) 
            { 
                e = e||event;
                console.log(e);
                if (e.button == 2) {
                //alert('Right click disabled!!!'); 
                 return false; }
            }

答案 28 :(得分:0)

重要提示:这取决于浏览器操作系统是否允许此类预防!

你应该吗? 。因为它不会阻止用户,但它只会让他/她烦恼。

您可以使用它吗? 。示例:在某些您希望自定义弹出菜单的网络应用程序中,游戏中用户可能会因为错误地右键单击而烦恼,以及其他情况。

Ubuntu 16.04中的Chrome(v65)=您 CAN 禁用右键单击。

Mac OS 10.11中的Chrome(v65)=您无法禁用右键单击。

Windows 7中的Chrome(v65)=您无法禁用右键单击。

Mac OS 10.11中的Firefox(v41)=您 CAN 禁用右键单击。

Windows 7中的Firefox(v43)=您 CAN 禁用右键单击。

// Vanilla JS way
document.addEventListener('contextmenu', function(e){
    e.preventDefault();
});

// jQuery way
$(document).bind('contextmenu', function(e) {
    e.preventDefault();
});