2011-05-10 11 views
10

Estoy trabajando en un proyecto de acuerdo basado en etiquetas y.Cómo llamar a la función de JavaScript especificada en un niño <frame>

Aquí está la estructura HTML común de la página principal (index.html):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html lang="en"> 
<head> 
</head> 
<frameset rows="75px,*" frameborder="0"> 
    <frame name="frame1" src="frames/frame1.html"> 
    <frameset class="child_frameset"> 
     <frame name="frame3" src="frames/frame3.html"> 
    </frameset> 
</frameset> 
</html> 

Aquí cómo se especifica la función de JavaScript en el marco secundario (frame3.html):

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <script type="text/javascript"> 
     function helloWorld(){ 
      alert('hello world!'); 
     } 
    </script> 
</head> 
<body> 
    <h1>I'm frame 3</h1> 
</body> 
</html> 

Mi tarea es llamar a helloWorld() función. ¿Cómo puedo hacer eso?
¡Gracias de antemano!

+0

¿Está intentando llamar a la función desde el elemento primario? – Ibu

+0

¡sí! Intento llamar a la función ** helloWorld() ** desde la página principal (index.html) – LoomyBear

Respuesta

20

Puede hacerlo de esta manera:

document.getElementById('frame3').contentWindow.helloWorld(); 
+0

+1 Aunque probablemente sea una buena idea darle primero al marco el ID. – lonesomeday

+2

Los marcos en el ejemplo no tienen una identificación, por lo que 'getElementById' no es realmente apropiado. Con solo un nombre use 'window.frames [" frame3 "]. HelloWorld()' en su lugar. – RoToRa

+0

Gracias por la respuesta más rápida ... Intenté todo esto pero la consola firebug me devuelve ** window.frames.frame3 no está definido ** y ** document.getElementById ("frame3") es nulo ** (tenga en cuenta que di frame an id = "frame3") ... alguna idea de por qué? – LoomyBear

1

Comprobar si contentWindow, contentDocument y obtener el objeto bastidor y realizar llamadas.

var siblingFrame; 
if (parent.document.getElementById('siblingFrameId').contentWindow){ 
    siblingFrame = parent.document.getElementById('siblingFrameId').contentWindow; 
} else if (parent.document.getElementById('siblingFrameId').contentDocument){ 
    siblingFrame = parent.document.getElementById('siblingFrameId').contentDocument; 
} else if (parent.document.getElementById('siblingFrameId')) { 
    siblingFrame = parent.document.getElementById('siblingFrameId'); 
} 

siblingFrame.helloWorld(); 
1

Puede llamar al método de marco hijo

window.frames[n].frames[m].methodName() 

donde n, m son números enteros a partir de 0.If tiene documento sólo un marco quitar los bastidores [m] pieza y realizar el trabajo .

Ya una cosa más, pruebe un error y descubra los números de trama exactos y el método. Espero que esto ayude

Cuestiones relacionadas