Foros del Web » Programando para Internet » Javascript »

Crear funciones a partir de una cadena de texto.

Estas en el tema de Crear funciones a partir de una cadena de texto. en el foro de Javascript en Foros del Web. Por circunstancias llega un momento en la ejecución de mi programa que tengo una cadena de texto con código javascript. Necesito alguna manera de hacer ...
  #1 (permalink)  
Antiguo 20/04/2006, 01:49
 
Fecha de Ingreso: septiembre-2005
Mensajes: 23
Antigüedad: 18 años, 7 meses
Puntos: 0
Crear funciones a partir de una cadena de texto.

Por circunstancias llega un momento en la ejecución de mi programa que tengo una cadena de texto con código javascript. Necesito alguna manera de hacer que ese código se ejecute.

Intento hacerlo con eval pero tengo un problema. Parte de ese código es declaración de funciones que iran asociadas a eventos de esa misma página (onClick por ejemplo) y cuando disparo esos eventos siempre obtengo como respuesta que la función no está defina.

¿Ideas?
  #2 (permalink)  
Antiguo 20/04/2006, 07:17
Avatar de Holden  
Fecha de Ingreso: enero-2002
Ubicación: Buenos Aires
Mensajes: 326
Antigüedad: 22 años, 3 meses
Puntos: 4
danos un ejemplo puntual de lo que tiene esa cadena.
Sería mejor si puedes publicar un ejemplo.
Saludos.
__________________
Holden-@r
http://www.hvaldez.com.ar
  #3 (permalink)  
Antiguo 21/04/2006, 01:46
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola:

Si quieres ejecutar una función... puedes hacerlo como un objeto colgando de window...

window["tuFunción"](los_parámetros);

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 22/04/2006, 12:03
 
Fecha de Ingreso: septiembre-2005
Mensajes: 23
Antigüedad: 18 años, 7 meses
Puntos: 0
A ver. Os pongo un ejemplo. Es lo más sencillo que he podido hacer que ilustra mi problema.

Está compuesto de 3 archivos:

El ej.html es la página que tiene todo el contenido:

Código:
<html>
<head></head>
<body>
<script type="text/javascript" src="func.js"></script>
<a onClick="ajaxLink()">Aqui</a>
<div id="Content">
</div>
</body>
</html>
Como veis solo tiene un texto y un div que va a contener lo que nos devuelva la petición que haremos a través de AJAX.

El segundo fichero es ej2.html que contiene lo que se insertará en el div de la página anterior

Código:
<script type="javascript">
  function enlace() {
    alert("Hola");
  }
</script>

<a onClick="hola();">Hola</a>
Y por último func.js con todo el javascript:

Código:
function myGetElementById(e) {
  if(document.getElementById) e=document.getElementById(e);
  else if(document.all) e=document.all[e];
  else e=null;
  return e;
}

  function ajaxLink() {   
  var request;

    if (window.XMLHttpRequest) { // Mozilla, Safari, ...
    request = new XMLHttpRequest();
//	http_request.overrideMimeType('text/xml');
  } else if (window.ActiveXObject) { // IE
    request = new ActiveXObject("Microsoft.XMLHTTP");
  }

  request.open('GET', "ej2.html", true);
  request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  request.send(null);

  
  request.onreadystatechange = function () {

    if (request.readyState == 4) {
	  // Mostramos el contenido
      myGetElementById('Content').innerHTML = request.responseText;
	  
    } else if (request.readyState == 1) {
      myGetElementById('Content').innerHTML = "Cargando";
    }
  }

}
El problema está en la línea en negrilla en la que se cambia el contenido del div. Al cambiar solo el innerHTML no se llega a ejecutar en ningún momento el código javascript que contenga la página objetivo. He probado llamando a eval y el código se ejecuta pero las funciones no quedan definidas

¿Hay alguna manera de evaluarlo como si hubiese estado ahi desde un principio?
  #5 (permalink)  
Antiguo 22/04/2006, 12:29
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
para mi no tiene sentido cargar un script dinamicamente con ajax, cargalo antes y listo, o hace esto que a mi me funcionó:

Código:
function getScript()
{
	var s = document.createElement('script');
	s.type = "text/javascript";
	s.src = "../includes/funciones.js";
	document.getElementsByTagName('head')[0].appendChild(s);
}
crea un <script> y lo inserta en el <head>
__________________
Internet Explorer SuckS
Download FireFox
  #6 (permalink)  
Antiguo 23/04/2006, 03:55
 
Fecha de Ingreso: septiembre-2005
Mensajes: 23
Antigüedad: 18 años, 7 meses
Puntos: 0
Ya pero el problema es que ej2.html a mi me viene dado. Yo no puedo tocar ese código porque lo hace otra persona.

Ahi podría haber de todo. Podría haber cualquier tipo de código javascript. Tan solo estoy seguro que no va a haber head ni body.

Además yo de antemano no se que ficheros javascript se van a usar ahi ni si se van a usar o no.

Última edición por rafadc; 23/04/2006 a las 04:12
  #7 (permalink)  
Antiguo 23/04/2006, 09:15
Avatar de SiR.CARAJ0DIDA  
Fecha de Ingreso: junio-2004
Ubicación: Acá
Mensajes: 1.166
Antigüedad: 19 años, 10 meses
Puntos: 4
si usas php, lo unico que se me ocurre es obtener el contenido de todos los script y crear un archivo temporal para incluirlo de la forma que te dije
__________________
Internet Explorer SuckS
Download FireFox
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 19:16.