代码之家  ›  专栏  ›  技术社区  ›  Jimmy

如何在JavaScript中禁用右键单击上下文菜单[duplicate]

  •  107
  • Jimmy  · 技术社区  · 17 年前

    我并不是在试图阻止“查看源代码”或诸如此类的愚蠢行为,而是在为某些元素制作一些自定义上下文菜单。

    <a id="moo" href=''> </a>
    
    <script type="text/javascript">
        var moo = document.getElementById('moo');
    
        function handler(event) {
            event = event || window.event;
    
            if (event.stopPropagation)
                event.stopPropagation();
    
            event.cancelBubble = true;
            return false;
        }
    
        moo.innerHTML = 'right-click here';
    
        moo.onclick = handler;
        moo.onmousedown = handler;
        moo.onmouseup = handler;
    </script>
    
    5 回复  |  直到 8 年前
        1
  •  140
  •   Omar Wagih    12 年前

    如果您不在乎每次用户尝试右键单击时都会用消息提醒用户,请尝试将其添加到您的body标记中

    <body oncontextmenu="return false;">
    

    这将阻止对上下文菜单的所有访问(不仅仅是通过鼠标右键,还可以通过键盘)

    但是,添加右键单击禁用器确实没有意义。任何具备基本浏览器知识的人都可以查看源代码并提取他们需要的信息。

        2
  •  119
  •   Kenan Banks    17 年前

    抓住 onContextMenu 事件,并在事件处理程序中返回false。

    您还可以捕获click事件并检查哪个鼠标按钮触发了事件 event.button ,在某些浏览器中。

        3
  •  19
  •   ElDoRado1239    12 年前

    我用过这个:

    document.onkeydown = keyboardDown;
    document.onkeyup = keyboardUp;
    document.oncontextmenu = function(e){
     var evt = new Object({keyCode:93});
     stopEvent(e);
     keyboardUp(evt);
    }
    function stopEvent(event){
     if(event.preventDefault != undefined)
      event.preventDefault();
     if(event.stopPropagation != undefined)
      event.stopPropagation();
    }
    function keyboardDown(e){
     ...
    }
    function keyboardUp(e){
     ...
    }
    

    然后在最后两个函数中捕获e.keyCode属性-如果e.keyCode==93,我知道用户要么释放了鼠标右键,要么按下/释放了上下文菜单键。

    希望能有帮助。

        4
  •  4
  •   Marc    17 年前

        5
  •  1
  •   stesch    17 年前