Deshabilitar botón derecho
La idea es bloquear el botón derecho del ratón para evitar que el usuario pueda sacar el menu contextual. En este menú contextual aparece, entre otras opciones, la de mostrar código fuente.
Podemos pensar que suprimiendo este menú contextual evitamos que nuestro código fuente sea inspecionado, si bien existen otras formas de que nuestro código fuente sea sustraido. Eso si, se plantean muchas trabas a la hora de que nuestro código fuente sea inspecionado.
La forma de anular el botón derecho es muy sencilla, lo que tenemos que comprobar es que cada vez que se produzca un evento en la página ver si el evento producido es la pulsación de los botones del ratón (onMouseDown) y ver si el botón pulsado es el derecho (número 2).
Lo primero que hay que hacer es registrar el manejador del evento, es decir, que función se ejecutará cuando se produzca el evento onMouseDown.
document.onMouseDown = anularBotonDerecho;
Lo siguiente será el codificar esta función (anularBotonDerecho). En la función nos valdremos del objeto predefinido event y de las propiedades asociadas al evento detectado (en nuestro caso el evento onMouseDown).
Algunas de las propiedades de dicho evento son:
- type, indica el tipo de evento producido (mousedown).
- screenX y screenY, que nos dan las coordenadas donde se hizo click.
- button, que nos indica el botón pulsado (1 para el izquierdo y 2 para el derecho)
- ....
A si es que comprobaremos si la propiedad button es un 2 y entonces le mostraremos un mensaje por pantalla o lo que nos venga en gana.
if (event.button == 2) {
alert("Botón derecho pulsado");
}
Soporte NetScape & menú contextual
( 26-junio-2006)
Una de las peores cosas que tiene Internet son las discrepancias entre los diferentes navegadores. En parte entendibles por la lentitud en la estandarización de los comités (lentitud en comparación con la velocidad de desarrollo de la red).
Aunque DOM Level2 Events intenta estandarizar el control de eventos. No es posible a día de hoy hacer un script único para los diferentes navegadores. Y en todo este embolado, Opera no ofrece el soporte de cancelación de eventos y promueve el uso del menú contextual obtenido por el botón derecho. Un lio.
Si una cosa sigue estando más o menos clara, aunque del tema presionar y el soltar un botón podríamos hacer un monologo, es que los eventos se pueden capturar con el onmousedown. Eso sí, esto puede no evitar el que el navegador lance el menú contextual. A si que no está de más el parar al menú contextual con el atributo oncontextmenu. Al cual, solo necesitaremos darle un valor de false.
document.onmousedown=anularBotonDerecho;
document.oncontextmenu=new Function("return false");
A la hora de calcular el botón presionado tenemos dos alternativas. Los navegadores Internet Explorer siguen basándose en la propiedad event.button y el valor 2 (botón derecho).
if (event.button == 2) {
alert("Botón derecho pulsado");
}
Por su parte, NetScape se apoya en la propiedad which y sus valores 2 y 3.
if (e.which == 3 || e.which == 2) {
alert("Botón derecho pulsado");
}
A si que además de validar el botón pulsado, añadiremos en la validación el navegador sobre el que operamos
function anularBotonDerecho(e) {
if (navigator.appName == 'Netscape'
&& (e.which == 3 || e.which == 2)){
alert(sMensaje);
return false;
} else if (navigator.appName == 'Microsoft Internet Explorer'
&& (event.button == 2)) {
alert(sMensaje);
}
}