Programación en castellano
Inicio > Taller Java > Lenguajes de script > Javascript > Impedir el uso del botón derecho del ratón
-Artículos

Impedir el uso del botón derecho del ratón

1 . Descripción y limitaciones
2 . Lo primero es interceptar onMouseDown
3 . El controlador de eventos

En Netscape 4 y Explorer 4 podemos impedir que aparezca el menú cuando el usuario pulsa el botón derecho sobre una imagen y, por tanto, impedir que puedan bajarse nuestras imágenes.

Descripción y limitaciones

Lo que haremos será interceptar el evento onMouseDown, que ocurre cuando el usuario pulsa un botón del ratón. Como lo que nos interesa es proteger las imágenes, procuraremos interceptarlo sólo cuando pulse sobre las mismas. Una vez interceptado, deberemos comprobar que el botón pulsado sea el derecho, e impedir en caso afirmativo que aparezca el menú. En este página, sin ir más lejos, está funcionando este código. Intenta bajarte una de las imágenes de arriba y verás.

Desafortunadamente, toda protección realizada con Javascript es susceptible de ser eliminada simplemente configurando el navegador para que no interprete Javascript. Nada es perfecto...

Lo primero es interceptar onMouseDown

Dado que lo que queremos es evitar que el usuario pulse sobre una imagen, lo mejor será interceptar ese evento en las mismas. Y eso es suficiente en Explorer. Sin embargo, y dado que muchas imágenes sirven también como enlaces, en Netscape seguirá apareciendo el menú cuando se de ese caso, por lo que deberemos interceptar también ese evento en los enlaces. Podríamos hacerlo así:

<IMG SRC="..." onMouseDown="nuestroControladorDeEventos()">

Pero, claro, hacer eso con todas nuestras imágenes puede resultar, como decirlo, aburrido. Así que lo mejor será hacer un script que llame al controlador de evento cuando suceda onMouseDown en cualquiera de las imágenes y enlaces del documento:

for (var i=0; i<document.images.length; i++)
  document.images[i].onmousedown=noBotonDerecho;
if (document.layers)
  for (var i=0; i<document.links.length; i++)
    document.links[i].onmousedown=noBotonDerecho;

Supongo que los más avispados se habrán dado cuenta de que nuestro controlador de eventos se va a llamar noBotonDerecho. Hemos de indicar que éste código sólo funciona en los navegadores de cuarta generación (y siguientes) ya que fueron los primeros en soportar el evento que estamos utilizando, onMouseDown. Por eso, para comprobar rápidamente que utilizamos Netscape, preguntamos por la existencia del vector document.layers, que sólo aparece en dicho navegador.

Por último, queda la cuestión de donde colocar esta rutina. Podemos hacer dos cosas. La primera es colocarla en una función que sea llamada desde el evento onLoad, pero eso tiene la desventaja de que el usuario podría bajarse imágenes mientras la página no haya terminado de cargar pero en parte sea ya visible. La otra opción, que recomiendo, es colocarlo al final de la página, después de todas las etiquetas IMG que pueda haber en la misma.

El controlador de eventos

Por último, una vez interceptado el evento, debemos comprobar que el botón pulsado sea el derecho y evitar, si es así, que aparezca el menú. Esto lo hará la siguiente función:

function noBotonDerecho(e) {
  if (document.layers && (e.which == 3 || e.which == 2))
    return false;
  else if (document.all && (event.button == 2 || event.button == 3))
    alert('No tiene usted permiso para intentar bajarse las imagenes');
  return true;
}

Esta función recibe como parámetro un objeto Event, que contiene información sobre el evento interceptado, entre ella cuál de los botones ha sido pulsado. Desafortunadamente, dicho objeto es distinto en Explorer y en Netscape, por lo que deberemos acceder a él de manera distinta según sea un explorador u otro.

En ambas versiones de objeto existe una propiedad que contiene el botón pulsado. Esa propiedad, en caso de haber sido pulsado el botón derecho, será 2 o 3 (dependiendo de si el ratón tiene 2 o 3 botones). Pero, en el caso de Netscape, dicha propiedad se llamará which y en el de Explorer, button.

Por último, una vez comprobado que el botón pulsado ha sido el derecho, debemos evitar que salga el menú. En Netscape basta con que el controlador de evento devuelva false, mientras que en Explorer lo que tenemos que hacer es "distraer" al navegador obligandole a hacer otra cosa, por ejemplo mostrar un mensaje de advertencia al usuario. Y con eso y un bizcocho... hasta el próximo artículo.

 

Últimos comentarios
Últimos 5 comentarios

Necesito saber (24/02/2006)

Por
Como hago que si un campo de de texto en un formulario en html no esta lleno el boton enviar no se active o no envie el formulario

¿como hago para programar el boton eliminar con php y mysql? (26/01/2006)

Por
me gustaria que me ayudaran con la programacion del boton eliminar con sript php y mysql con servidor apache bajo ambiente php triad gracias por la colaboracion

Y como se pone eso? (06/09/2005)

Por
Ola!
keria saber si ay q descargarse un programa y como se llama para ponerlo en mi pagina porke estoy arta de q copien mi pagina.
Contesta lo antes posible.
Gracias

la cultura (30/03/2005)

Por
me parese que algunas personas aruianan las culturas a mi me parese que si algien destrosa algo como un ombu en estinciondebe ser arestado o aplicarle una lecion y me parese que deberiamos esforsarnos un poco y hacer la vida mejor yose que se puede.

la agresibidad (30/03/2005)

Por
yo digo que las personas que roban o que matan no deben ser liberados por que seguro que duspues hacen algo peor por eso lo que cometen algo como matar no debe ser perdonada.
 
Tienda
Patrocinados
 

Copyright © 1999-2007 Programación en castellano. Todos los derechos reservados.
Formulario de Contacto - Datos legales - Publicidad

Hospedaje web y servidores dedicados linux por Ferca Network

red internet: musica mp3 | logos y melodias | hospedaje web linux | registro de dominios | servidores dedicados
más internet: comprar | recursos gratis | posicionamiento en buscadores | tienda virtual | gifs animados