2010-08-26 25 views
13

Si abrir un diálogo de este modo:jQuery cómo cerrar el diálogo desde el iframe dentro del cuadro de diálogo?

$('<iframe id="externalSite" class="externalSite" src="http://www.example.com" />').dialog({ 
     autoOpen: true, 
     width: 800, 
     height: 500, 
     modal: true, 
     resizable: true 
    }) 

¿Cómo puedo cerrar el diálogo de withing el iframe?

+0

Yo diría que el código en el interior no tiene permisos para eso, esp. si es un sitio externo. – Piskvor

+0

@Piskor, es el mismo sitio. Puedo llamar a una función en la ventana principal como 'window.parent.function()' pero no estoy seguro de cómo apuntaré a este diálogo para cerrarlo. –

+1

Merece la pena señalar que es posible que necesite establecer la propiedad [document.domain] (https://developer.mozilla.org/en-US/docs/DOM/document.domain) en el iFrame contenido. Esto le permite compartir contextos de marcos entre diferentes subdominios en el mismo dominio de nivel superior. –

Respuesta

23

OK, así que puse el iframe en la página con la pantalla configurada en none. Puedo abrir de esta manera:

$('#externalSite').dialog({ ... }); 

en la ventana principal de los padres que tengo una función como esta:

function closeIframe() 
{ 
    $('#externalSite').dialog('close'); 
    return false; 
} 

Desde dentro del marco flotante que llamo:

window.parent.closeIframe(); 
+1

Sí, pero el problema ocurrirá cuando abra "http://mywebsite.com/myapp/" y la fuente iframe use "www" (o viceversa, intercambie "www"). Sospecho fuertemente que OP está haciendo algo así. – TARKUS

+0

Soy el OP, y esto fue hace 3 años :) –

+2

El otro día busqué en Google un problema. Llegué a una página de StackOverflow, y alguien decía: "Utilicé el código de Gregory Lewis, y funcionó."Iba a dejar un comentario gracioso sobre otro chico llamado Gregory Lewis, hasta que me desplacé por la página, y vi que estaba hablando de una respuesta que di. Tuve el problema dos veces, y ni siquiera recuerdo que resolví el problema. problema el año pasado que estaba buscando una respuesta ayer. – TARKUS

0

Has probado esto ?:

$(window.parent).dialog('close'); 

nunca he utilizado el diálogo jQuery UI, así que no estoy seguro de que realmente va a funcionar. Me parece que necesitaría mantener una referencia al diálogo que creó para que pueda usarlo para cerrar el diálogo.

nota, también podría buscar elementos en el DOM del padre por:

$('#someParentDOMElement' , window.parent); 

Por supuesto, todo esto es suponiendo que el sitio se carga dentro del iframe está en el mismo dominio que el documento de nivel superior . De lo contrario, el documento en su iframe no tendrá acceso al DOM principal.

+1

Intenté '$ (window.parent) .dialog ('close');' no funcionó, pero tomé su mantener una idea de referencia y la utilicé en mi respuesta. Gracias. –

+1

'$ (window.parent) .dialog ('close')' no funciona porque 'window.parent' hace referencia al objeto de ventana JavaScript principal, no al elemento de diálogo de la interfaz de usuario jQuery. – cdmckay

6

simplemente llamando al siguiente funcionó para mí:

window.parent. $ ('# externalSite'). dialog ('close');

+0

En realidad, en mi caso, estaba usando Wijmo Dialog (basado en jQuery UI) y por lo tanto Tenía un cuadro de diálogo/emergente cargando contenido externo (HTML) y necesitaba una forma de cerrar el diálogo/ventana emergente presionando un botón "cancelar" dentro de ese HTML externo ... así que lo siguiente funcionó bien para mí: window.parent. $ ('#eventdialog'). wijdialog ('close'); por lo tanto, #eventdialog por supuesto fue mi selector. Dentro del evento de cierre del diálogo wijmo, también podría agregar cualquier código de limpieza. Espero que esto ayude –

Cuestiones relacionadas