2012-03-02 29 views
8

Tengo un sitio de Wordpress donde las publicaciones se cargan en un iframe.Cómo cerrar iframe desde dentro de iframe?

Este es el código que funciona:

<a class="trick" rel="<?php the_permalink() ?>" href="<?php the_permalink() ?>"><?php the_title(); ?></a> 

$ (document) ready (function() {

$.ajaxSetup({cache:false}); 
    $(".trick").click(function(){ 
     var post_link = $(this).attr("rel"); 
     $("#frame").css("display","block"); 
     $("#frame").attr("url", post_link); 
     $("body").css("overflow","hidden"); 
    }); 

    });   </script> 
<iframe id="frame" frameborder="no" allowtransparency="true" width="100%" height="100%" scrolling="no" src=""></iframe> 

Ahora, la forma de cerrar esta cargada iframe desde dentro del iframe?

La página principal es index.php (principal wordpress loop), el contenido del iframe es single.php (publicación única) sin encabezado y pie de página.

Gracias.


Esto es lo que tengo en single.php

<head> 

<script src="http://code.jquery.com/jquery-latest.js"></script> 
    <script> 
    $(document).ready(function(){ 
     $("#close").click(function(){ 
      $('#frame', window.parent.document).remove(); 

      }); 

     }); 

    </script> 


</head> 

<body> 
<div id="container-single"> 
    <button id="close" >Close</button> 



    <?php if (have_posts()) : while (have_posts()) : the_post(); ?> 

     <article <?php post_class('single') ?> id="post-<?php the_ID(); ?>"> 

      <h1 class="entry-title"><?php the_title(); ?></h1> 

      <div class="entry-content"> 

       <?php the_content(); ?> 

       <?php wp_link_pages(array('before' => 'Pages: ', 'next_or_number' => 'number')); ?> 

       <?php the_tags('Tags: ', ', ', ''); ?> 

       <?php include (TEMPLATEPATH . '/_/inc/meta.php'); ?> 

      </div> 


     </article> 



    <?php endwhile; endif; ?> 

    </div> 

</body> 
+1

¿Cerrar iframe? ¿Qué quieres decir? ¿Desea eliminar el iframe interno o qué? –

+0

Posible duplicado de [Cómo cerrar un iframe dentro del propio iframe] (http://stackoverflow.com/questions/6754935/how-to-close-an-iframe-within-iframe-itself) –

Respuesta

17

ejecutar el código debajo de single.php que se carga en el interior del iframe. Encontrará el iframe usando el elemento primario window como contexto y lo eliminará u ocultará.

//You can call hide() if you want to just hide it 
$('#iframe', window.parent.document).remove(); 
+0

Lo he intentado pero no funciona, puedes ver mi contenido single.php editado en mi pregunta ... –

+0

Solo asegúrate. ¿Está iframe en el mismo dominio? – ShankarSangoli

+0

Sí, claro. El iframe carga una publicación de WordPress. –

9

Sé un pequeño truco en realidad.

hacer una función en su página padre

var closeIFrame = function() { 
    $('#iframeid').remove(); 
} 

Dentro del marco flotante que desea cerrar llamada desde cualquier lugar que desee

parent.closeIFrame(); 

Tricky, ¿no es así?

+1

Si declara una función como esa no se agrega al objeto 'window', creo que tiene que hacer esto:' var closeIFrame = function() {...} ' – Jasper

+1

@Jasper, gracias hombre. Debería dormir un poco ahora ...;) – Starx

1
// Inside the iframe  
frameElement.remove(); 
+0

Esto funciona, pero no es de dominio cruzado –

0

Me encontré con este problema al crear un bookmarklet como Pinterest's Pin It.

Debería funcionar entre dominios.

La única manera de que pudiera resolver esto, era mediante la publicación de eventos entre la página dentro del marco flotante y la página principal siguiendo este ejemplo en GitHub:

https://gist.github.com/kn0ll/1020251

He publicado una respuesta en este otro hilo: https://stackoverflow.com/a/43030280/3958617

Espero que ayude!

Cuestiones relacionadas