Foros del Web » Programando para Internet » Javascript »

modificar scrollbar con javascript

Estas en el tema de modificar scrollbar con javascript en el foro de Javascript en Foros del Web. hola a todos! Necesito ayuda con un problemilla, no consigo modificar las propiedades de las scrollbars de un iframe mediante un script colocado en el ...
  #1 (permalink)  
Antiguo 03/07/2003, 16:13
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 22 años, 1 mes
Puntos: 1
modificar scrollbar con javascript

hola a todos!
Necesito ayuda con un problemilla, no consigo modificar las propiedades de las scrollbars de un iframe mediante un script colocado en el documento principal, que es el que contiene el iframe. Me es imposible colocar el script en la pagina que se carga en el iframe en cuestion, pues esa página se carga desde internet, no puedo controlarla yo en ningun momento. Significa eso que tampoco puedo modificar ninguna propiedad mientras se está ejecutando?
Es que llevo ya mogollon de horas y sigue sin funcionar nada... lo estoy haciendo como sigue, a ver si alguien me dice qué estoy haciendo mal, porque me he remirado bastantes tutoriales sobre control de frames y aunque se puede hacer de varias maneras, ninguna funciona...

window.frames['leerlibro'].document.body.style.scrollbar3dLightColor='greeny ellow';

--> "leerlibro" es el valor que le he dado a la propiedad name del iframe

Gracias y un saludo !
  #2 (permalink)  
Antiguo 03/07/2003, 16:19
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 1 mes
Puntos: 4
¿Has probado esto?

Código:
leerlibro.body.style.scrollbar3dLightColor='greenyellow';
Aunque no sé si te lo permitirá, y más tratandose de una página que no es tuya ( )

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #3 (permalink)  
Antiguo 03/07/2003, 16:33
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 22 años, 1 mes
Puntos: 1
ya lo probé, aunque como lo intenté de mil maneras posibles ya ni me acordaba de si así lo habia probado, pero nada, no funciona. Qué rabia! pues el iframe lo utilizo para cargar un libro de visitas (que en teoria es personalizado a mi gusto, pero en ciertos detalles al parecer no lo es tanto.. ), y odio que queden dos scrollbars juntas e iguales...
bueno muchas gracias por intentar ayudarme Bravenap!
de todas formas si alguien me puede ayudar que no dude please!
  #4 (permalink)  
Antiguo 03/07/2003, 16:39
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 1 mes
Puntos: 4
Código:
leerlibro.body.style.scrollbar-3dlight-color = 'greenyellow';
Por cierto, ¿ese color existe?
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #5 (permalink)  
Antiguo 03/07/2003, 16:44
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 22 años, 1 mes
Puntos: 1
jejej si que existe Bravenap, pruebalo tu mismo si no te fias de mi... de todas formas yo puse antes solo una linia de configuracion de la scrollbar, pero tengo 6 y todas con colores diferentes como 'blue', 'red' y por el estilo, asi que no será problema del color...
  #6 (permalink)  
Antiguo 03/07/2003, 17:04
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 1 mes
Puntos: 4
Prueba esto. No es lo mismo pero estoy seguro que vas a saber encontrar la respuesta:

Código:
<html>
<head>
<style type="text/css">
.verdeamarillo {scrollbar-3dlight-color = 'greenyellow';}
.rojo {scrollbar-3dlight-color = 'red';}
</style>
<script>
function cambia(){
document.body.className='rojo';
}</script></head>

<body class="verdeamarillo">
<a href="#" onClick="cambia()">Cambia el color</a> 
</body>
</html>
Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #7 (permalink)  
Antiguo 04/07/2003, 08:03
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 22 años, 1 mes
Puntos: 1
Hola Bravenap! lo intenté también como me dijiste poniendo leerlibro.body.className="verdeamarillo"; pero el caso es que sigo sin saber siel acceso al iframe lo estoy haciendo bien, porque de ser asi el problema es el simple hecho de intentar acceder a una pagina que no es mia, pero almenos tengo la seguridad que no es mi culpa. Intento encontrar ejemplos de como acceder a diferentes propiedades de frames e iframes pero sobre estos últimos poca cosa dicen, aunque supongo que se accede igual no? Alguien me ayuda o recomienda algun tutorial que hable sobre el tema?
  #8 (permalink)  
Antiguo 04/07/2003, 09:51
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 10 meses
Puntos: 772
Hola, debspain. Hola, Bravenap.

Yo creo que no puede cambiarse el color del scrollbar de un iframe, igual que no puede cambiarse el color de fondo, porque esas propiedades están definidas en la página que se carga en el iframe.

Si estoy confundido, que alguien con más conocimientos me corrija.

Saludos,
  #9 (permalink)  
Antiguo 04/07/2003, 16:02
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 22 años, 1 mes
Puntos: 1
me aprece que el ese es el problema JAvierB, pues lo he intentado de mil formas y vamos, supongo que lo he hecho bien pues me he basado en los manuales y tutoriales que tengo y aunque nunca se sabe, parece culpa del famoso iframe... De todas formas, si podemos acceder a un frame desde otro... por qué ocurre eso con los iframes? acaso no tienen las mismas propiedades?
  #10 (permalink)  
Antiguo 04/07/2003, 16:04
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 22 años, 1 mes
Puntos: 1
si alguien entiende por qué ocurre o puede explicarme algo sobre el tema, suplico que lo haga! un saludo !
  #11 (permalink)  
Antiguo 04/07/2003, 22:53
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años, 1 mes
Puntos: 317
Hola debspain , Bravenap , JavierB :

Sin ánimo de ofender : Todos sabemos que los colores de scrollbar son sólo para IE5.5+ ; no?.

Digo, porque hice un par de maquetas basadas en el mensaje y funcionaron perfectamente, así que no sé cuál puede ser el problema. Seguramente me debe faltar por entender algo, a veces las cosas más obvias se nos pasan por alto.

Posteo lo que tengo; aunque de seguro hay más formas de conseguir el efecto, no quiero seguir hasta no entender dónde está la falla.

La mayor dificultad que encontré es que el estilo no se puede aplicar hasta que el documento no está completamente cargado en el iframe, y no encuentro un evento en javascript / JScript que me marque cuándo ocurre ésto para empezar el cambio; pero seguramente es un tema ya resuelto.


Código:
HTML>
<HEAD>
<SCRIPT>

function cargayDOM(){
marcoint.location="http://www.unapagina.htm";
setTimeout
("marcoint.document.body.style.scrollbar3dLightColor='greenyellow'",2500);
/* TIEMPO PARA CARGAR EL DOCUMENTO Y QUE EL OBJETO EXISTA */}

function DOM(){
var new_rule;
new_rule=
marcoint.document.styleSheets[0].addRule
("body","scrollbar-face-color:blue");
}
/* ESCRIBE ANTES DE LA ETIQUETA </STYLE>
'BODY {SCROLLBAR-FACE-COLOR: blue}' */

</SCRIPT>

</HEAD>
<BODY>
<h2>El primer botón carga el documento en el <i>iframe</i> 
y luego modifica el color del borde iluminado en barra de desplazamiento. 
El segundo cambia el color de los botones de la barra 
una vez cargada por el primero.</h2>

<center>
<button onclick=cargayDOM()>-1-</button>
<font style="letter-spacing:100px">..</font>
<button onclick=DOM()>-2-</button>
<p>
<iframe name=marcoint>
</iframe>
</center>

<b>Otro método puede ser :</b><br>
<samp>
document.createStyleSheet
(document.body.style.scrollbar3dLightColor='greenyellow');
</samp>
</BODY>
</HTML>
  #12 (permalink)  
Antiguo 05/07/2003, 03:11
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 10 meses
Puntos: 772
Hola, furoya.

Muy bueno tu ejemplo. Ya sabía que solo funciona en IE 5.5 o superior, pero no conocía esa forma de añadir estilos. Me lo anoto

Tampoco conozco la forma de saber cuando el documento está totalmente cargado en el iframe, a ver si alguien más despierto nos lo aclara.

Saludos,
  #13 (permalink)  
Antiguo 05/07/2003, 03:29
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 10 meses
Puntos: 772
Hola de nuevo.

He "encontrado" una propiedad de document que indica cuando está completamente cargado (también es exclusiva de IE)

if (document.readyState=="complete")

pero no se muy bien como encajarlo en el código de furoya.

Saludos,
  #14 (permalink)  
Antiguo 06/07/2003, 13:39
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 1 mes
Puntos: 4
Hola a todos.

He estado probando el ejemplo de furoya ( ) cargando FDW y Google en el marco interno, y en ambos casos no me ha permitido hacer el cambio de color de las barras. En ambos casos me lanza el mismo error: "Acceso denegado".

Sin embargo si me ha funcionado con un página mía que está en el mismo servidor, por lo que he llegado a la conclusión de que no se puede hacer lo que debspain quería hacer en un principio.

Lo siento, pero por otro lado, me parece lógico. Si no, habría un montón de páginas a las qeu se modificaría al antojo de cada uno sin pertenecerles.

Un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #15 (permalink)  
Antiguo 06/07/2003, 15:16
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 22 años, 1 mes
Puntos: 1
Hola Bravenap! (y cía)
Bueno ante todo muchisimas gracias por haberme contestado... aunque no dijera nada al respecto (pues no me ha sido posible hasta ahora) he estado haciendo las pruebas con frames internos que son mios y estan en el mismo servidor, pero no exactamente como dijo en un principio furoya con el settimeout, sino que intenté que las propiedades de la scrollbar cambiaran cuando el documento del iframe estuviera totalmente cargado con la propiedad readyState que comentó JavierB, pero no me funciona, y no sé si es que lo estoy utilizando mal, de todas formas seguire intentandolo hasta que me canse, agote las posibilidades y tenga que pedir ayuda.
Ah y Bravenap, se que es lógico que no podamos cambiar propiedades de otras páginas, pero da un poquito de rabia cuando se trata de páginas que realmente personalizamos nosotros mismos, pero se actualizan desde otro servidor.
De todas formas gracias, y ya digo si consigo algo os lo hago saber!
  #16 (permalink)  
Antiguo 10/07/2003, 11:16
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años, 1 mes
Puntos: 317
Hola otra vez.

Es cierto lo que descubrió Bravenap: las páginas deben estar alojadas en el mismo sitio, o no funciona. No es la única limitación, estuve preguntando y me enviaron un tutorial que estoy seguro sacaron de la página de Microsoft (si alguien sabe del comportamiento de un iframe en Internet Explorer son ellos). Lo posteo al final.

Pero no te desanimes debspain, aún te falta probar con ventanas pop-up y SSI ( <!--#include file="mi_libro_de_visitas.html" --> ).


Por otro lado, disiento con Bravenap y JavierB sobre el tema "cambios en documentos ajenos". Si empezamos a hilar fino, es lógico que no podamos modificar un código fuente, pero éste sirve al navegador sólo para escribir la página ; una vez rendereada ¡La página es nuestra!.

De hecho, con ese principio funcionan los bukmárlets.

Un ejemplo: estamos viendo un documento que pertenece a los Foros del WEB, el cual no podemos modificar desde el source porque no somos crackers; pero como no nos gusta el color del texto, lo podemos cambiar en nuestra copia escribiendo ( o copiando y pegando ) en la barra de direcciones

javascript:void(document.fgColor='red')

y dándole un [ENTER] ( o un Go , o un Ir a ) cambiamos el formato del texto.
Si lo que no nos gusta es como se ve la barra de desplazamiento en el Internet Explorer :

javascript:void(document.body.style.scrollbarFaceC olor='greenyellow')

Para volver al formato original alcanza con recargar la página.


Gracias JavierB por el dato de document.readyState) , y no te preocupes en ponerlo en mi código, el problema se da solamente en máquinas lentas como la mía

Un saludo a todos

furoya


NOTA : Este tema fue publicado antes de mayo del 2004; para esa fecha, un cambio en el diseño del foro dejó sin efecto el bookmarklet para el cambio de color de texto. Si bien éste no debe ser el más práctico ( además, es para IE ), lo dejo para que aún se pueda entender de qué estamos hablando.

javascript:for (i=0; i<document.all.length; i++){document.all(i).style.color='red'};void(0)

El uso es igual al del bukmárlet mencionado en el mensaje.


Cross-Frame Scripting and Security


With Dynamic HTML, content in different windows and frames can interact in powerful ways by scripting with the object model. However, since it is possible for a browser to simultaneously display unrelated documents in its various windows and frames, certain rules must be enforced to protect data integrity and privacy of information.

This section describes how and why these restrictions apply in the DHTML object model. All rules about script interaction apply equally to windows, dialog boxes, FRAMESETs, FRAMEs, and IFRAMEs.

For most content, only interactions with content from the same domain are allowed. For example, a typical page on http://www.microsoft.com/ can freely script content on any other page on http://www.microsoft.com/ but cannot script to pages that are located on a different Web domain. The DHTML object model uses the document.domain property to enforce this restriction: only pages with identical domain properties are allowed free interaction. The protocol of the URL must also match. For instance, an HTTP page cannot access HTTPS content.

The range of permissible access for a page can be expanded when a script assigns the document.domain property to a suffix of the site name space, up to the second-level domain. For example, a page on http://www.microsoft.com/ can assign the document.domain property—initially "www.microsoft.com"—to be "microsoft.com" to broaden access to include pages in http://home.microsoft.com or any other site, as long as the other pages also set the document.domain property to the identical value. Since only pages from a site whose name ends with "microsoft.com" will permit this domain to be set, it is assured that content from the same provider mutually agrees to interact and is free to do so. Domain suffixes shorter than the second-level domain (such as just "com") are disallowed because they expose beyond a single provider. For international site names such as http://www.microsoft.co.jp/, the second-level domain for widest access would be "microsoft.co.jp" (not "co.jp").

Since it is important to be able to navigate windows or frames to any URL beyond the domain restriction, these types of accesses are always permitted. Only access that attempts to read-out or modify content is restricted. For instance, the window.location might be assigned to cause navigation to occur, but this property cannot be read if the URL is of a different domain. This would allow one page to learn where the user has been browsing, and to allow this is a breach of the user's privacy. Some restrictions that apply to pages of different domains include:

window.location = Property can be set to navigate, but cannot read.
Other location = Functionality is blocked.
document.href = Property can be set to navigate but cannot read.
Other document = Functionality is blocked.
<IFRAME> src = property can be set to navigate but cannot read

Scripts that attempt to access parts of the object model to which they do not have access will be blocked with a "permission denied" error.

While domain security can prevent certain types of content interaction, it is important to understand that this restriction is necessary to ensure security. For example, without domain security, a rogue page could "snoop" on other pages or, using DHTML, manipulate its content.



http://www.w3.org/Jigsaw/Doc/User/SSI.html

Última edición por furoya; 18/06/2004 a las 11:19 Razón: actualizar bookmarklet
  #17 (permalink)  
Antiguo 10/07/2003, 15:53
Avatar de Bravenap  
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 22 años, 1 mes
Puntos: 4
Oye furoya, ¡Impresionante eso de!

javascript:void(document.fgColor='red')

No tenía ni idea de que se podía hacer algo así.

¿Podrías explicar un poco en qué consiste la teoría?

Un saludo a todos.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!
  #18 (permalink)  
Antiguo 11/07/2003, 01:25
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 22 años, 10 meses
Puntos: 772
Nuevos para furoya.

Dos buenas intervenciones en este mensaje. ¿Será verdad que no hay 2 sin 3?

Saludos,
  #19 (permalink)  
Antiguo 11/07/2003, 09:23
 
Fecha de Ingreso: noviembre-2002
Mensajes: 224
Antigüedad: 22 años, 1 mes
Puntos: 1
hola a todos!!
Bien, hace ya unos dias conseguí mi objetivo principal, que era modificar las scrollbars de un iframe desde el documento principal usando la propiedad readyState y el metodo setTimeout, y aunque no podamos modificar un documento ajeno, por curiosidad miré si la propiedad readyState funcionaba con el iframe ajeno y tampoco lo hace, aunque solo es una propiedad de lectura... .. ¿por qué no funciona aunque solo sea de lectura? Otra cosa... con lo de javascript:void(document.fgColor='red') me quedé con cara de tonta pues esta bien poder hacer eso..., pero tampoco funciona en marcos ajenos... y ahi va otro: ¿por qué?Bueno myfriends muchisimas gracias! Seguiré investigando... Ah y un para todos los que me ayudais!
  #20 (permalink)  
Antiguo 16/07/2003, 10:50
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años, 1 mes
Puntos: 317
Hola nuevamente:

debspain : la imposibilidad de cambiar formato dentro de frames o iframes es un mecanismo de "seguridad" de MS , no una imposibilidad técnica. Habrá que reclamarle a Bill Gates por ésto.

Con respecto a los bukmárlets ( o búkmarlets ) se puede empezar con www.bookmarklets.com para tener una idea de sus posibilidades.

Un saludo a todos.
  #21 (permalink)  
Antiguo 21/06/2007, 15:10
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 22 años, 1 mes
Puntos: 317
Re: modificar scrollbar con javascript

Después de tantos años creo que le encontraron la vuelta para interactuar de frame a frame . Aunque sea con PHP.

Obtener texto seleccionado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:11.