Foros del Web » Programando para Internet » Javascript »

buscador Web y iFrames

Estas en el tema de buscador Web y iFrames en el foro de Javascript en Foros del Web. Hola a todos. Vereis tengo una pagina A con un iframe llamado "contenido" que carga a su vez otra pagina B. En la pagína A ...
  #1 (permalink)  
Antiguo 23/12/2004, 06:27
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 19 años, 4 meses
Puntos: 0
Pregunta buscador Web y iFrames

Hola a todos.

Vereis tengo una pagina A con un iframe llamado "contenido" que carga a su vez otra pagina B.
En la pagína A tengo un código para buscar texto dentro de un pagina web y posicionarse allí donde está el texto elegido. Ahí va el código:
Código:
<!-- Copiar dentro del tag BODY -->
<script language="JavaScript">

// By Mike Hall ([email protected])

var NS4 = (document.layers); 
var IE4 = (document.all);

var win = window; // Con frames usar top.nombre.window;
var n = 0;

function findInPage(str) {

var txt, i, found;

if (str == "")
return false;

// Find next occurance of the given string on the page, wrap around to the
// start of the page if necessary.

if (NS4) {

// Look for match starting at the current point. If not found, rewind
// back to the first match.

if (!win.find(str))
while(win.find(str, false, true))
n++;
else
n++;

// If not found in either direction, give message.

if (n == 0)
alert("Not found.");
}

if (IE4) {
txt = win.document.body.createTextRange();

// Find the nth match from the top of the page.

for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
txt.moveStart("character", 1);
txt.moveEnd("textedit");
}

// If found, mark it and scroll it into view.

if (found) {
txt.moveStart("character", -1);
txt.findText(str);
txt.select();
txt.scrollIntoView();
n++;
}

// Otherwise, start over at the top of the page and find first match.

else {
if (n > 0) {
n = 0;
findInPage(str);
}

// Not found anywhere, give message.

else
alert("Not Found");
}
}

return false;
}

</script>

<form name="search" onSubmit="return findInPage(this.string.value);">
<font size="2"><p></font><font size="3"><input name="string" type="text" size="15"
onChange="n = 0;"></font> <input type="submit" value="Buscar"> </p>
</form>
Bien la duda es la siguiente quiero que este código puede buscar en el iframe "contenido" que carga la pagina B y es donde quiero que busque el texto.

Se ha entendido? Espero que sí. Sabe alguien alguna solución. Gracias. Un Saludo a todos.
  #2 (permalink)  
Antiguo 23/12/2004, 10:51
Avatar de ppjillol@  
Fecha de Ingreso: diciembre-2002
Mensajes: 110
Antigüedad: 21 años, 5 meses
Puntos: 0
Hola,

Yo diria q es mas una pregutna para el foro de Javascipt. Allí te ayudaran mejor.

Aun así, podria probar lo siguiente:

prueba a cambiar esto:

Código:
txt = win.document.body.createTextRange();
por el nombre de la pagina B o IFRAME o si no es imprescindible, elimina el IFRAME .

Espero te ayude

ppjj
  #3 (permalink)  
Antiguo 23/12/2004, 11:31
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 19 años, 4 meses
Puntos: 0
Sonrisa

Gracias, por tu ayuda, pero la verdad es que no entiendo el codigo, ya que fue facilitado en un foro de ayuda, la verdad es que el código funciona, hace bien las busquedas siempre que sean dentro de la misma página, pero claro el problema viene cuando quiero que busque en otra pagina cargado en un iframe desde otra.

La verdad es que en el código hay un comentario en la siguiente linea:
Código:
var win = window; // Con frames usar top.nombre.window;
en la cual indica como usar con frames, pero la verdad no lo entiendo.

Pero gracias, por tu ayuda, como no seas un poco más explicito en la linea de codigo que me envias no se donde ponerla. La verdad es estoy asimilando muy poco a poco esto de la programación.
Gracias otra vez.
  #4 (permalink)  
Antiguo 23/12/2004, 13:05
Avatar de ppjillol@  
Fecha de Ingreso: diciembre-2002
Mensajes: 110
Antigüedad: 21 años, 5 meses
Puntos: 0
uppp! tiens toda la razón! se me habia colado ese comentario.

Prueba a cambiarlo, como dice el comntario, por el nombre del iframe q tengas.

DE:
var win = window;
A:
var win = top.nombreDelIframe.window;


Espero te funcione!,

SAlud,
ppjj
  #5 (permalink)  
Antiguo 23/12/2004, 13:07
Avatar de ppjillol@  
Fecha de Ingreso: diciembre-2002
Mensajes: 110
Antigüedad: 21 años, 5 meses
Puntos: 0
por si no ha quedado claro, debes cambiar, donde dice :

nombreDelIframe

por el nombre que TU le hayas dado a tu Iframe!

a10
oojj
  #6 (permalink)  
Antiguo 24/12/2004, 04:45
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 19 años, 4 meses
Puntos: 0
Gracias ppjj

Eso que me has comentado ya lo habia probado yo, tal y como se ve en la linea de codigo (la parte comentada) pero nada. Evidentemente cambié el nombre del iframe y le puse el que yo le he dado, pero cuando carga la pagina, me sale un error que dice lo siguiente:

Código:
Erro: 'top.Contenido.window' es nulo o no es un objeto.
.

No se, también te pongo el código de la pagina en cuestión, a ver si ves algo que yo no veo:

Código:
<html>
<head>
<title>Documento Prueba</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#E6E6E6" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
<table width="100%" >
 <tr>
  <td><!-- Copiar dentro del tag BODY -->
<script language="JavaScript">

// By Mike Hall ([email protected])

var NS4 = (document.layers); 
var IE4 = (document.all);

var win = top.Contenido.window;    // Con frames usar top.nombre.window;
var n   = 0;

function findInPage(str) {

  var txt, i, found;

  if (str == "")
    return false;

  // Find next occurance of the given string on the page, wrap around to the
  // start of the page if necessary.

  if (NS4) {

    // Look for match starting at the current point. If not found, rewind
    // back to the first match.

    if (!win.find(str))
      while(win.find(str, false, true))
        n++;
    else
      n++;

    // If not found in either direction, give message.

    if (n == 0)
      alert("Not found.");
  }

  if (IE4) {
    txt = win.document.body.createTextRange();

    // Find the nth match from the top of the page.

    for (i = 0; i <= n && (found = txt.findText(str)) != false; i++) {
      txt.moveStart("character", 1);
      txt.moveEnd("textedit");
    }

    // If found, mark it and scroll it into view.

    if (found) {
      txt.moveStart("character", -1);
      txt.findText(str);
      txt.select();
      txt.scrollIntoView();
      n++;
    }

    // Otherwise, start over at the top of the page and find first match.

    else {
      if (n > 0) {
        n = 0;
        findInPage(str);
      }

      // Not found anywhere, give message.

      else
        alert("No se ha encontrado.");
    }
  }

  return false;
}

</script>&nbsp;
		<form name="search" onSubmit="return findInPage(this.string.value);">
  		<font size="2"><p><font size="3"><input name="string" type="text" size="15"
  		onChange="n = 0;"></font> <input type="submit" value="Buscar"> </p>
			</form></td>
 </tr>
 <tr>
  <td><iframe src="Texto.htm" id="Contenido" name="Contenido" width="100%" height="1100" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" align="default">
    </iframe></td>
 </tr>
</table>
</body>
</html>.
.

Ya se que es muy simple, pero es una prueba, y la verdad no funciona.
Se te ocurre algo. Gracias ppjj
  #7 (permalink)  
Antiguo 24/12/2004, 06:21
Avatar de ppjillol@  
Fecha de Ingreso: diciembre-2002
Mensajes: 110
Antigüedad: 21 años, 5 meses
Puntos: 0
Ya te digo q en JS estoy muy pez, però probando, probando...... me ha salido esto 8-)

cambia DE :
txt = win.document.body.createTextRange();
A :
txt = document.frames["Contenido"].document.body.createTextRange();

si te fijas en el codigo esto deberia funcionar para el IE (document.all).... prueba tu a ver si saca el resto.

Salud i buenas fiestas,
ppjj
  #8 (permalink)  
Antiguo 27/12/2004, 05:18
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 19 años, 4 meses
Puntos: 0
Muchas, muchas gracias

Funciona a las mil maravillas solo con la linea que me has enviado.

Otra cosa a pesar de que stas pez en JS, eres el único que me ha contestado, y además correctamente. En el foro de JS, no me han respondido, no se si es porque no me expresé bien o porque son fiestas.

Así que gracias, de nuevo y problemilla resuelto.
  #9 (permalink)  
Antiguo 27/12/2004, 06:58
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
Tema trasladado al foro de javascript desde (x)html
  #10 (permalink)  
Antiguo 27/12/2004, 09:34
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 19 años, 4 meses
Puntos: 0
Bueno después de haber solventado el primer paso, voy a ver si me explico:
Como ya había comentado tengo una página A que tiene un iframe llamado contenido. Este iframe carga la página B. Esta página B a su vez carga 3 iframes más. Cada uno de estos iframes cargan finalmente 3 páginas C,D y E respectivamente que son las que contienen todo la información a buscar.

Con el código que ya habreis visto enviado por ppjillol, funciona correctamente. Ahora el nuevo problema surge cuando intento hacer la busqueda en esas 3 páginas desde A.

Gracias a todos.
  #11 (permalink)  
Antiguo 29/12/2004, 03:22
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 19 años, 4 meses
Puntos: 0
Hola,

Hay alguien que pueda ayudarme.
Gracias.
  #12 (permalink)  
Antiguo 31/12/2004, 07:01
Avatar de ppjillol@  
Fecha de Ingreso: diciembre-2002
Mensajes: 110
Antigüedad: 21 años, 5 meses
Puntos: 0
Cita:
Hay alguien que pueda ayudarme.
Para ayudarte a aprender, seguro q encuentras mucha gente dispuesta
...para hacer el trabajo q deberias hacer tu....menos

Mirate el codigo q te pase y prueba a hacer cambios, como hize yo.

Saludos
jjpp
__________________
8)
  #13 (permalink)  
Antiguo 03/01/2005, 04:53
 
Fecha de Ingreso: diciembre-2004
Mensajes: 15
Antigüedad: 19 años, 4 meses
Puntos: 0
Cita:
Iniciado por ppjillol@
Para ayudarte a aprender, seguro q encuentras mucha gente dispuesta
...para hacer el trabajo q deberias hacer tu....menos

Mirate el codigo q te pase y prueba a hacer cambios, como hize yo.

Saludos
jjpp
Tienes toda la razón jjpp, aunque creeme cuando te digo, que soy una persona que antes de molestar a los demás me molesto yo a mi mismo 100.001 veces, quiero decir con esto que, si vuelvo a pedir ayuda, es porque no me salgo del problema, y ha he intentado hacer todas las pruebas posibles que mi limitado entendimiento en este tema alcanza. Ni mucho menos quiero que la gente me haga el trabajo como tú dices, simple una orientación como tu buenamente hicieste y la cual agradezco mucho, ya que me solventaste la duda y me encaminaste en como tenía que hacerlo. Pero bueno, quizás tenga que buscar otras alternativas al problema que planteo y barajar más posibilidades de conseguir lo mismo por otras vías.

No sé estoy ahora en un punto muerto.

De todas formas, ya con el hecho de entretenerte a leer esto y contenstar, para mi es mucho.

Gracias.
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 23:11.