2010-02-12 15 views
21

Pensé que esto sería lo suficientemente simple pero no puedo encontrar la respuesta. Necesito saber cómo puedo acceder al nombre de un iframe desde dicho iframe. Estaba intentando algo como esto pero no está funcionando.acceso al nombre del iframe desde iframe interior

<iframe name="thename"> 
    <script type="text/javascript"> 
    alert(parent.name); 
    </script> 
</iframe> 

Respuesta

47

Usted tenía razón. Establecer el atributo name en un frame o iframe establece la propiedad name del objeto global window del marco en esa cadena. (No parent, que se refiere a la ventana del documento que posee el cuadro.)

Así que a menos que algún otro script ha cambiado deliberadamente el nombre, es tan simple como:

1.html: 
<iframe name="tim" href="2.html"></iframe> 

2.html: 
<script type="text/javascript"> 
    alert(window.name); // tim 
</script> 
+4

¿qué hay de acceder a los atributos del iframe? por ejemplo, si tiene algún atributo de conjunto de datos? – AlexStack

+8

@AlexStack: 'window.frameElement' le proporciona el elemento del documento principal que se refiere a usted, puede' getAttribute' en él (suponiendo que tenga acceso SOP). Ver http: // stackoverflow.com/questions/4097870/jquery-access-iframe-id-from-iframe-content/4098384 # 4098384 para el respaldo donde no está disponible – bobince

0

Algo como esto debería funcionar:

parent.document.getElementById('idhere').name; 

usted tiene que utilizar el padre y luego el elemento sea byId, nombre, etc ... luego acceder a la propiedad de nombre.

Así que el código debe ser como:

<iframe name="thename"> 
<script type="text/javascript"> 
    var iframeName = parent.document.getElementById('idhere').name; 
</script> 
</iframe> 
+2

¿Qué pasa si usted no sabe ¿la identificación o el iframe se sienta en un dominio separado? –

+0

Debería entonces usar getElementsByTagName e iterar sobre los resultados según algunos criterios. –

0

Bueno, un elemento IFRAME que no contengan nada, de que se orienta otro documento. Entonces, usar una etiqueta SCRIPT dentro de un IFRAME no tiene mucho sentido. En su lugar, use el SCRIPT dentro del documento llamado, p.

iframe_caller.html:

<html> 
<body> 
    <iframe id="theIframe" name="theIframe" src="iframe_doc.html"></iframe> 
</body> 
</html> 

iframe_doc.html:

<html> 
<body> 
    <script type="text/javascript"> 
    var iframes= parent.document.getElementsByTagName("iframe"); 
    document.write(iframes[0].getAttribute("id")); 
    </script> 
</body> 
</html> 

Nota que estoy usando parent.document.function() allí.

43

hay una combinación de respuestas que prefieren:

// window.frameElement Gets IFrame element which document inside 
window.frameElement.getAttribute("Name"); 

funciona en IE7 +, Mozilla & Chrome

+2

Me gusta más esta respuesta que la aceptada porque hace referencia al elemento iframe real. – keyneom

+0

esto no funciona en http://publisherconsole.appspot.com/safeframe/creative-preview.html, ¿alguna sugerencia? – PayteR

+0

lo descubrí https://stackoverflow.com/a/46128839/839434 – PayteR

1

en algunos casos window.frameElement devuelve null en iframe, así que pensé en una solución para ello.

1. Es necesario establecer de hash en la URL src de iframe

<iframe name="tim" href="2.html#your-hash"></iframe> 

2. en el marco flotante puede obtener este hash con

<script type="text/javascript"> 
    var hash = window.location.hash; 
</script>