代码之家  ›  专栏  ›  技术社区  ›  Vinay Pandey

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

  •  268
  • Vinay Pandey  · 技术社区  · 15 年前

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

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

    22 回复  |  直到 15 年前
        1
  •  436
  •   Michał Perłakowski    8 年前

    通过为“contextmenu”事件添加事件侦听器并调用 preventDefault() 方法:

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

    说的是: 不要这样做。

    为什么?因为除了烦人的用户之外,它什么也做不到。许多浏览器也有一个安全选项,无论如何都不允许禁用右键单击(上下文)菜单。

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

        2
  •  119
  •   Community Maksym Gontar    7 年前

    不要

    只是,不要。

    无论你做什么,你都不能阻止用户完全访问你网站上的每一点数据。只要在浏览器上关闭javascript(或使用类似noscript的插件),您编写的任何javascript都可以呈现为无意义的。此外,无法禁用任何用户为您的站点简单地“查看源代码”或“查看页面信息”(或使用wget)的功能。

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

    不要。

    更新: 似乎这个小话题随着时间的推移已经被证明是颇具争议的。尽管如此,我还是支持这个问题的答案。有时候正确的答案是建议而不是字面上的回答。

    人们在这个问题上偶然发现,希望找到如何创造 习俗 上下文菜单应该在其他地方查找,例如这些问题:

        3
  •  65
  •   Mr Speaker    12 年前

    最初的问题是如何停止右键单击 假设用户可以禁用javascript :这听起来是邪恶和邪恶的(因此是负面的反应),但是所有的复制品都会在这里重新定向,即使许多复制品要求的是不那么邪恶的目的。

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

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

    但是如果你在做一个游戏,那么记住右键单击按钮会触发 右键菜单 事件-但它也会触发常规 鼠标按下 松开鼠标 事件也是如此。所以你需要检查一下 哪一个 属性来查看触发事件的是左(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); 
        }
    });
    

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

        4
  •  33
  •   Omar Wagih    11 年前

    如果你不关心每次用户试图右键单击时都向他们发送消息,请尝试将其添加到你的身体标签中。

    <body oncontextmenu="return false;">
    

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

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

        5
  •  27
  •   Vishnu Vikraman Sreekala    10 年前

    如果您是jquery风扇,请使用此

        $(function() {
            $(this).bind("contextmenu", function(e) {
                e.preventDefault();
            });
        }); 
    
        6
  •  20
  •   mplungjan    12 年前

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

    假设您试图保护图像,则其他方法是-

    使用flash播放器,用户不能像这样下载它们,但他们可以轻松地进行屏幕捕获。

    如果你想更温和些,把图像变成一个包含透明图像的DIV的背景,_la-

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

    足以阻止随意窃取图片的行为(参见下面的示例),但与所有这些技术一样,只要对HTML有基本的理解,就很容易失败。

        7
  •  17
  •   Wayne    15 年前

    首先,如果不使用客户端功能,就无法实现这一点。这就是运行JavaScript的地方。

    其次,如果您试图控制最终用户可以从您的站点消费什么,那么您需要重新考虑如何显示这些信息。图像有一个公共的URL,可以通过HTTP获取,而不需要浏览器。

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

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

    最后,资源管理实际上是用户/客户管理。

    互联网的第一条规则,如果你不想让它成为现实,就不要把它公之于众!

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

        8
  •  15
  •   Anthony    15 年前

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

    没有好的解决方案,没有javascript就没有解决方案周期。

        9
  •  12
  •   Andrew    10 年前

    如果您的目标是不允许用户简单地保存您的图像,您还可以检查单击的目标是否是图像,在这种情况下只禁用右键单击。所以右键单击可以用于其他目的。摘自上述代码:

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

    这只是为了省去保存图像的最简单方法,但仍然可以做到。

        10
  •  9
  •   aravind3    12 年前
    <!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>
    

        11
  •  6
  •   nntona    9 年前

    按如下方式操作(它也适用于Firefox):

    $(document).on("contextmenu",function(e){
    
         if( e.button == 2 ) {
             e.preventDefault();
              callYourownFucntionOrCodeHere();
         }
    return true;
    });
    
        12
  •  5
  •   arvinda kumar    6 年前

    我使用了这个代码来禁用任何网页的右键单击,它工作正常。您可以使用此代码

    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>
        13
  •  4
  •   Cruachan    15 年前

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

    我曾经为客户端构建了一个简单的Java小程序,它强制通过屏幕捕获来完成图像的捕获,您可能会考虑类似的技术。在有限的范围内,它起作用了,但我仍然认为这是在浪费时间。

        14
  •  4
  •   Antony chakradhar kasturi    11 年前

    将此代码放入 <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时。

        15
  •  3
  •   Anbu    9 年前
        <script>
            window.oncontextmenu = function () {
                console.log("Right Click Disabled");
                return false;
            }
        </script>
    
        16
  •  3
  •   Dipesh    8 年前

    试试这个

    <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>
    
        17
  •  3
  •   Faruque Ahamed Mollick    7 年前

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

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

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

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

        18
  •  2
  •   soheil bijavar    11 年前
     $(document).ready(function () {
                document.oncontextmenu = document.body.oncontextmenu = function () { return false; }
            });
    
        19
  •  2
  •   Kim Minseo    9 年前

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

    我能禁用右键单击吗

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

    是的,通过使用Javascript,您可以禁用发生的任何事件,并且您只能通过Javascript来实现这一点。你所需要的只是:

    1. 工作硬件

    2. 一个你可以从中了解密码的网站或其他地方。因为你需要它们。

    现在假设您要阻止输入键,按这里是代码:

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

    右键单击使用此:

    event.button == 2
    

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

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

    你说得对,浏览器允许你使用 JavaScript Javascript为您完成了整个工作。您不需要设置任何内容,只需要头部的脚本属性。

    为什么不禁用它?

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

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

    浏览器使用鼠标导航: 一些浏览器,如 歌剧 使用鼠标导航,所以如果您禁用它,用户肯定会讨厌您的用户界面和脚本。

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

    参考钥匙代码:

    按键和鼠标键代码:

    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/

        20
  •  1
  •   zms    7 年前

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

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

    看看这个: http://www.landcoder.com/4-dynamic-interactive-code-snippets-jquery-705#disablerightclick

        21
  •  1
  •   Sos.    7 年前

    Javascript:

    document.getElementsByTagName("html")[0].setAttribute("oncontextmenu", "return false"); 
    
        22
  •  0
  •   evilReiko    6 年前

    重要注意事项: 这取决于 浏览器 操作系统 是否允许这样的预防!

    应该 你做到了吗? . 因为它不会阻止用户,但会让他/她很恼火。

    你会用吗? 是的 . 例如:在一些你想要定制弹出菜单的网络应用中,在游戏中,当用户错误地点击鼠标右键时,可能会感到恼火,还有其他情况。

    Ubuntu 16.04中的chrome(v65)=you 罐头 禁用右键单击。

    Mac OS 10.11中的chrome(v65)=you 不能 禁用右键单击。

    chrome(v65)in windows 7=您 不能 禁用右键单击。

    Mac OS 10.11中的firefox(v41)=you 罐头 禁用右键单击。

    firefox(v43)in windows 7=您 罐头 禁用右键单击。

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