Me sigo respondiendo yo solo
Ya va un poquito mejor, eran que chrome utiliza otras llamadas para obtener los anchos y los altos, tanto del cliente como del cursor y demás. Lo he corregido pero en Chrome no me muestra el menu al pulsar el botón derecho. ahí os va el código
yo sigo al tema :(
Código:
<script type="text/javascript">
function detectarBoton(event){
//Clausulas para detectar que boton se esta pulsando en que navegador
if(navigator.appName=='Netscape'){
//boton derecho pulsado en navegador Netscape
if(event.button==2){
//hay alguna incompativilidad en la funcion sombra
sombra();
alert("pulsado boton derecho");
}else if(event.button==0){
visibilidad();
}
}else if (navigator.appName.indexOf('Microsoft')!=-1){
//boton derecho pulsado en navegador Explorer
if(event.button==2){
sombra();
}else if(event.button==1){
visibilidad();
}
}
}
</script>
<script type="text/javascript">
//posicion absoluta del menu=0, menu con el boton derecho=1
var menutipo=1;
//mostramos el menu
function sombra(e){
if(document.getElementById){
mimenu=document.getElementById("menudesplegable");
}else if(document.all){
mimenu=document.all.menudesplegable;
}
if(!e){
var e=window.event;
}
//tamaño de la ventana - posicion del puntero
if (navigator.appName=='Netscape'){
//tamaño de la ventana - posicion del puntero
var borde_derecho=window.innerWidth - document.body.clientWidth;
var borde_inferior=window.innerHeight - document.body.clientHeight;
//distancia del menu al puntero
if(borde_derecho< mimenu.innerWidth){
mimenu.style.left=document.body.scrollLeft + document.body.clientWidth - menudesplegable.innerWidth + 'px';
mimenu.style.top= document.body.scrollTop + document.body.clientHeight - menudesplegable.innerHeight + 'px';
}else{
mimenu.style.left=document.body.scrollLeft+ document.body.clientWidth+ 'px';
mimenu.style.top= document.body.scrollTop + document.body.clientHeight + 'px';
}
}else if (navigator.appName.indexOf('Microsoft')!=-1){
//tamaño de la ventana -posicion del puntero
var borde_derecho=document.body.offsetWidth - e.clientX;
var borde_inferior=document.body.offsetHeight- e.clientY;
//distancia del menu al puntero
if(borde_derecho < mimenu.offsetWidth) {
mimenu.style.left = document.body.scrollLeft + e.clientX - menudesplegable.offsetWidth + 'px';
mimenu.style.top = document.body.scrollTop + e.clientY- menudesplegable.offsetHeight+ 'px';
}
else {
mimenu.style.left = document.body.scrollLeft + e.clientX + 'px';
mimenu.style.top= document.body.scrollTop + e.clientY+ 'px';
}
}
alert("posicion x: "+mimenu.style.left+"\nPosicion y: "+mimenu.style.top);
//alert("Distancia del menu al puntero: "+mimenu.style.left+"\n Distancia del menu horizontal: "+mimenu.style.top);
mimenu.style.visibility='visible';
return false;
}
function visibilidad(){
if (document.getElementById) {
mimenu = document.getElementById("menudesplegable")
}else if (document.all) {
mimenu = document.all.menudesplegable;
}
mimenu.style.visibility = "hidden"
}
</script>