2010-08-26 21 views
13

Wenn ich einen Dialog wie folgt:jQuery wie man Dialog von iframe innerhalb des Dialogs schließt?

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

Wie kann ich den Dialog von withing den iframe schließen?

+0

Ich würde sagen, der Code innerhalb hat keine Berechtigungen dafür, esp. wenn es eine externe Seite ist. – Piskvor

+0

@Piskor, es ist die gleiche Seite. Ich kann eine Funktion auf dem Elternfenster wie 'window.parent.function()' aufrufen, aber ich bin nicht sicher, wie ich diesen Dialog zielen würde, um ihn zu schließen. –

+1

Beachten Sie, dass Sie möglicherweise die Eigenschaft [document.domain] (https://developer.mozilla.org/en-US/docs/DOM/document.domain) für den enthaltenen iFrame festlegen müssen. Auf diese Weise können Sie Frame-Kontexte zwischen verschiedenen Sub-Domains auf derselben Top-Level-Domain teilen. –

Antwort

23

OK, also habe ich den iframe auf der Seite mit der Anzeige auf keine gesetzt. Ich öffne es wie folgt aus:

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

auf dem Hauptelternfenster ich eine Funktion wie dieses:

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

Aus dem iframe nenne ich:

window.parent.closeIframe(); 
+1

Ja, aber das Problem tritt auf, wenn Sie "http://meinewebsite.com/myapp/" öffnen und die iframe-Quelle "www" verwendet (oder umgekehrt, das "www" austauschen). Ich vermute stark, dass das OP so etwas macht. – TARKUS

+0

Ich bin der OP, und das war vor 3 Jahren :) –

+2

Neulich googelte ich ein Problem. Ich kam zu einer StackOverflow-Seite und jemand sagte: "Ich habe den Code von Gregory Lewis benutzt, und es hat funktioniert."Ich würde einen komischen Kommentar über einen anderen Typen namens Gregory Lewis hinterlassen, bis ich die Seite runterscrollte und sah, dass er über eine Antwort sprach, die ich gab. Ich hatte das Problem zweimal und konnte mich nicht einmal daran erinnern, dass ich das gelöst hatte Problem letztes Jahr, dass ich nach einer Antwort auf gestern suchte. – TARKUS

0

Haben Sie das ?:

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

ich nie die jQuery UI-Dialog verwendet haben, so bin ich nicht sicher, ob das funktionieren wird tatsächlich. Es scheint mir, dass Sie einen Verweis auf den von Ihnen erstellten Dialog beibehalten müssen, damit Sie ihn zum Schließen des Dialogs verwenden können.

Hinweis, können Sie auch für die Elemente in der DOM-Mutter sucht nach:

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

Natürlich all dies unter der Annahme, dass die Website, die Sie innerhalb der iframe laden auf der gleichen Domäne wie die übergeordnete Dokument . Wenn nicht, dann hat das Dokument in Ihrem iframe keinen Zugriff auf das übergeordnete DOM überhaupt.

+1

Ich habe '$ (window.parent) .dialog ('close') versucht;' es hat nicht funktioniert, aber ich habe Ihre Referenz beibehalten und in meiner Antwort verwendet. Vielen Dank. –

+1

'$ (window.parent) .dialog ('close')' funktioniert nicht, da 'window.parent' auf das übergeordnete JavaScript Window-Objekt und nicht auf das jQuery UI-Dialogfeldelement verweist. – cdmckay

6

einfach telefonisch unter der hat für mich funktioniert:

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

+0

Wirklich in meinem Fall benutzte ich Wijmo Dialog (aufgebaut auf jQuery UI) und so Ich hatte einen Dialog/Popup geladen externen Inhalt (HTML) und benötigt eine Möglichkeit, den Dialog/Popup durch Drücken einer "Abbrechen" -Taste in diesem externen HTML zu schließen .. so funktionierte das folgende für mich: window.parent. $ ('#eventdialog'). wijdialog ('close'); also war #eventdialog natürlich mein selector.Wenn das wijmo-dialogfenster geschlossen wurde, konnte man auch einen Bereinigungscode hinzufügen –

Verwandte Themen