Foros del Web » Programando para Internet » Javascript »

Un JavaScript para volverse loco.

Estas en el tema de Un JavaScript para volverse loco. en el foro de Javascript en Foros del Web. Me estoy volviendo loco. Estoy intentando mostrar un mensaje cada x tiempo de una forma un poco rebuscada, pero no entiendo porque no funciona. Bueno, ...
  #1 (permalink)  
Antiguo 15/07/2003, 13:25
 
Fecha de Ingreso: marzo-2002
Mensajes: 37
Antigüedad: 22 años, 1 mes
Puntos: 0
Un JavaScript para volverse loco.

Me estoy volviendo loco.

Estoy intentando mostrar un mensaje cada x tiempo de una forma un poco rebuscada, pero no entiendo porque no funciona.
Bueno, en realidad si que funciona, pero sólo la primera vez que entra en la función, a la segunda falla la cabrona.

Código:
function muestra()
{
document.write("<script language=\\'javaScript\\' src=\\'datos.js\\'><\/script>");
setTimeout("muestra()", 1000);
}

muestra();
Y el fichero datos.js contiene:
Código:
document.write('un mensaje');

Por favor alguien puede ayudarme.
¿O acaso lo que estoy intentando programar es imposible que funcione?

Muchas gracias por vuestro tiempo.
  #2 (permalink)  
Antiguo 15/07/2003, 14:52
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Hola einc,

en principio el document.write hay que usarlo mientras aún se está cargando el documento. Entonces escribe en el lugar que le corresponde y continúa con la carga del resto de la página.

Pero una vez el documento está cargado, usar document.write logrará que se sobre-escriba el documento entero, quedando por único contenido lo que se escribió con el método write.

Eso por un lado.

Por otro... no hay necesidad de que cada vez escribas (ni siquiera la primera vez) la inclusión del archivo .js. Bastaría con que lo llamaras sin document write y que la función que se llama recursivamente estuviera en el .js. Claro que seguirías teniendo el problema de la sobre-escritura del documento con el write del .js.

Mi sugerencia es que en vez de usar el método write uses un innerHTML o algo similar dentro de algún contenedor (celda, capa...)

Ahí va un ejemplo:

<script language="JavaScript" type="text/JavaScript">
var frases = new Array(
"Perico de los palotes",
"Andando que es gerundio",
"Mis melones desafían la ley de la gravedad")
function frasecillas(capa,cual)
{
if(cual==frases.length){cual = 0}
document.getElementById(capa).innerHTML = frases[cual]
cual++
cual2 = cual
capa2 = capa
setTimeout('frasecillas(capa2,cual2)',2000)
}
</script>

  #3 (permalink)  
Antiguo 15/07/2003, 16:44
 
Fecha de Ingreso: marzo-2002
Mensajes: 37
Antigüedad: 22 años, 1 mes
Puntos: 0
Muchas gracias tunait por tu respuesta y explicaciones sobre el funcionamiento de document.write.

El caso es que estaba muy ilusionado con la idea de poder cargar un .js (o cualquier otro tipo de fichero) al vuelo. Así podría mostrar el contenido de este fichero y de esta forma podría (entre otras cosas) ver por ejemplo la cantidad de páginas servidas en mi website en tiempo real. Para ello simplemente tendría que modificar (desde el lado del servidor) el fichero que intento cargar desde jasvascript y actualizarlo con el número de páginas servidas. He puesto un ejemplo tonto, pero si fuese posible... ufff se le podría sacar mucho partido.

Sé que lo puedo hacer usando iframes y actualizar el contenido de estos desde javascript, pero lo que no me gusta es que los usuarios que tienen IE escucharían un molesto click cada 2x3, y eso es insoportable.

Luego está el tema de java, pero se me ponen los pelos de punta cada vez que me encuentro con una página que lo usa, ya que el disco duro se convierte durante unos segundos en una batidora (por el ruido que hace), mención aparte que no todo el mundo lo tiene instalado.



Si alguien tiene alguna sugerencia la escucharé encantado.
Gracias por todo.
  #4 (permalink)  
Antiguo 16/07/2003, 03:12
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Pero hombre, puedes usar igualmente un archivo .js, no tienes más que meter el código en un .js y llamarlo desde tu página
  #5 (permalink)  
Antiguo 16/07/2003, 10:48
 
Fecha de Ingreso: marzo-2002
Mensajes: 37
Antigüedad: 22 años, 1 mes
Puntos: 0
Agradezco mucho tu respuesta, pero no comprendo muy bien que es lo que me quieres decir. ¿Podrías explicarmelo un poco más en profundidad o ponermer algún pequeño ejemplo?

Muchas Gracias.
  #6 (permalink)  
Antiguo 16/07/2003, 10:55
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Claro

Mira, el código que te hice (o si haces uno nuevo, pues ese) puedes copiarlo y pegarlo en un documento nuevo que no contenga nada más que código javascript (ni siguiera hay que poner las etiquetas de <script> ni </script> y lo puedes guardar, por ejemplo, con el mismo nombre que el otro que hiciste; datos.js

Y en tu html pones la llamada al .js tal y como hacías con el otro, solo que no es necesario que lo insertes con write(), pones simplemente


<script language="javascript" src="datos.js"></script>

Y yá estarás usando un js externo
  #7 (permalink)  
Antiguo 17/07/2003, 02:28
 
Fecha de Ingreso: marzo-2002
Mensajes: 37
Antigüedad: 22 años, 1 mes
Puntos: 0
Ya estoy aquí de nuevo.

El método que me comentas está muy bien, el problema está en que sólo sirve para hacer un 'include' de un javascript a la hora de cargar la página.
Pero lo que yo necesitaría es poder hacer un 'include' (o varios) simplemente llamando a una función javascript. Así de esta forma podría cargar cualquier cosa que me interese 'al vuelo'.

¿Es posible hacer esto?
  #8 (permalink)  
Antiguo 17/07/2003, 12:29
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Mira, los js externos deben cargarse con la página. No puedes llamar a otro nuevo una vez la página ha terminado de cargarse.

Si necesitas usar 20 includes distintos, pues los incluyes de entrada uno detrás del otro.

<script language="javscript" src="datos1.js"></script>
<script language="javscript" src="datos2.js"></script>
<script language="javscript" src="datos3.js"></script>
<script language="javscript" src="datos4.js"></script>
<script language="javscript" src="datos5.js"></script>
<script language="javscript" src="datos6.js"></script>
<script language="javscript" src="datos7.js"></script>
<script language="javscript" src="datos8.js"></script>
<script language="javscript" src="datos9.js"></script>
<script language="javscript" src="datos10.js"></script>
<script language="javscript" src="pericodelospalotes.js"></script>
etc.
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:08.