2008-12-19 42 views
89

No es que intente evitar 'Ver fuente' o algo así de tonto, pero estoy creando algunos menús contextuales personalizados para ciertos elementos.Cómo deshabilitar el menú contextual con el botón derecho en JavaScript

EDIT: respuesta a respuestas: He intentado esto:

<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> 
+0

El clic derecho está deshabilitado, sin embargo, el control-clic aún está activo en Firefox. Deshabilite el control-clic o haga clic con el botón derecho en Firefox. –

Respuesta

67

capturar el evento onContextMenu, y volver falsa en el controlador de eventos.

También puede capturar el evento click y comprobar qué botón del mouse disparó el evento con event.button, en algunos navegadores de todos modos.

+1

Me alegro de que funcionó. Sin embargo, definitivamente querrás comprobar esto en todos tus navegadores de destino. – Triptych

+1

no parece funcionar para mí en google chrome (mi único navegador de destino) – Tgwizman

+38

Devolver falso desde el controlador de eventos no bloqueó el menú contextual predeterminado para que no aparezca en Firefox o Chrome en mi caso. Pero llamar a event.preventDefault() sí ... Pensé que esto podría ayudar. –

7

Nota al margen oscura: nunca he visto un script con el botón derecho que funcionaría en Opera, incluso si Opera está configurado para permitir la interceptación con el botón derecho (que está desactivada por defecto).

+0

Sí, pretendo tener formas alternativas, aunque menos convenientes, de acceder a las mismas acciones para Opera – Jimmy

3

Si su página realmente se basa en el hecho de que la gente no será capaz de ver ese menú, usted debe saber que los navegadores modernos (por ejemplo Firefox) permiten al usuario decidir si realmente quiere desactivar o no. Entonces no tienes garantía de que el menú esté realmente deshabilitado.

1

No puede confiar en los menús contextuales porque el usuario puede desactivarlos. La mayoría de los sitios web quieren usar la función para molestar al visitante.

82

Si no se preocupan por alertar al usuario mediante un mensaje cada vez que tratan de clic derecho, trate de añadir esto a su cuerpo de la etiqueta

<body oncontextmenu="return false;"> 

Esto bloqueará todo el acceso al menú de contexto (no solo con el botón derecho del mouse pero también desde el teclado)

Sin embargo, realmente no tiene sentido agregar un clickr desactivador. Cualquier persona con conocimiento básico del navegador puede ver el origen y extraer la información que necesita.

+10

. Por ejemplo, si está construyendo una aplicación web táctil, donde no hay ningún clic derecho. con su código, el desarrollador puede evitar el comportamiento estándar desagradable como el menú emergente contextual. – gco

+0

Y también en mi caso: cuando abre un menú contextual, puede hacer clic derecho en el menú y abrirá el menú predeterminado del navegador. Eso es realmente molesto, especialmente cuando el mouse está roto y disparará el clic derecho dos veces. – GuyT

+3

Esta debería ser la respuesta aceptada. –

10

He utilizado este:

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){ 
... 
} 

Luego coger la propiedad e.keyCode en esas dos últimas funciones - si e.keyCode == 93, sé que el usuario sea liberado el botón derecho del ratón o pulsa/soltó la tecla del Menú de contexto.

Espero que ayude.

+0

ya no funciona – Anthony

Cuestiones relacionadas