Mover el contenido de un frame sin barras de scrol

Cuando cargo en dos frames dos archivos HTML locales a mi máquina, y desde uno quiero desplazar el contenido del otro utilizando la función
- window. Parent. NombreFrame. ScrollBy(n, m)
no tengo ningun problema, pero si el contenido del frame a mover es un HTML de una direccion remota, o el resultado obtenido de un servlet, no me deja hacerlo (me deniega el permiso).
¿A qué se debe? ¿Puede solucionarse?
1

1 Respuesta

28.975 pts.
En Javascript (también en VBScript) existe una limitación de seguridad que hace que el código no pueda acceder a propiedades de dominios diferentes al propio (desde el que se ejecuta el código). Un ejemplo de esto sería:
a) Desde un script en local, abre una ventana con window. Open, a una URL cualquiera.
var miVentana=window.open('http:\/\/www.yahoo.es','nuevaVentana');
b) Una vez abierta, intenta acceder a cualquier cosa. Por ejemplo, intenta hacer
alert(miVentana.location.href);
Te dará un error (Acceso denegado, o algo similar), debido a que estás intentando acceder a una propiedad de una ventana que contiene un documento de un dominio que "no te pertenece". Para frames o iframes funciona exactamente igual.
La justificación de esto es sencilla. Supón que tienes esta función, que "aumenta de tamaño" el soft de Microsoft (cambia la palabra "Microsoft" por "Macrosoft" en todo el cuerpo de una página):
function broma(bodyElem) {
// sólo funciona en IE5 o NS6
var re=/Microsoft/g;
bodyElem.innerHTML=bodyElem.innerHTML.replace(re,'Macrosoft');
}
En tu propia página puedes llamarla así:
broma(document.getElementsByTagName('BODY').item(0));
Imagínate que pudieras llamarla sobre un documento que no fuera "tuyo"... Nadie te impediría ocultar tus funciones malévolas en un frame oculto (de altura 0) y dejar que tus usuarios naveguen por un frame normal, que a ellos les parece toda la ventana, mientras tú cambias el contenido de las páginas que ven a tu gusto. Tampoco tienes acceso de lectura para evitar que puedas "seguir" la navegación de los internautas después de haber dejado tu página, por este mismo método.
Naturalmente, esta limitación de seguridad no puede evitarse. En tu caso, no podrás conseguir manipular sitios externos. Sin embargo, el tema de los servlets es diferente. Cuando haces las pruebas en local, ves las respuestas de los servlets como provenientes del dominio de su servidor (externo o interno), y por tanto distinto al tuyo (en local ni siquiera se usa el protocolo HTTP para obtener los contenidos de las páginas). Si "subieras" tu script al mismo servidor que devuelve el resultado de procesar los servlets, funcionaría sin problemas, ya que el script se encontraría accediendo a propiedades de páginas que residen bajo su mismo dominio. No importa, a este respecto, que las páginas hayan sido creadas dinámicamente, o que sean estáticas.
Espero que esta respuesta te haya ayudado a aclarar algunos conceptos de seguridad en cliente. No dudes en volverme a preguntar si te surge cualquier duda.
Muchas gracias por esta aclaración, me ha sido de gran ayuda. Al subir el script al servidor que contiene los servlets todo ha ido como la seda :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas