2010-08-26 13 views
13

अगर मैं ऐसा है जैसे एक संवाद खोलने:jQuery कैसे संवाद के भीतर iframe से संवाद बंद करने के लिए?

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

मैं iframe के भीतर से संवाद कैसे बंद कर सकते हैं?

+0

मैं कहूंगा कि अंदर कोड के लिए अनुमति नहीं है, esp। अगर यह एक बाहरी साइट है। – Piskvor

+0

@Piskor, यह वही साइट है। मैं 'window.parent.function()' जैसी मूल विंडो पर फ़ंक्शन कॉल कर सकता हूं लेकिन यह सुनिश्चित नहीं करता कि मैं इसे बंद करने के लिए इस संवाद को कैसे लक्षित करूं। –

+1

यह ध्यान देने योग्य है कि आपको [document.domain] (https://developer.mozilla.org/en-US/docs/DOM/document.domain) संपत्ति को निहित iFrame पर सेट करने की आवश्यकता हो सकती है। यह आपको एक ही शीर्ष स्तर डोमेन पर विभिन्न सबडोमेन के बीच फ्रेम संदर्भ साझा करने देता है। –

उत्तर

23

ठीक है तो मैंने पेज पर आईफ्रेम को किसी भी सेट पर सेट के साथ रखा है। मैं इसे इस तरह खोलें:

$('#externalSite').dialog({ ... }); 
मुख्य माता पिता खिड़की पर

मैं इस तरह एक समारोह है:

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

iframe के भीतर से मैं फोन:

window.parent.closeIframe(); 
+1

हाँ, लेकिन समस्या तब होगी जब आप "http://mywebsite.com/myapp/" खोलें और iframe स्रोत "www" का उपयोग करता है (या इसके विपरीत, "www" को स्वैप करना)। मुझे दृढ़ता से संदेह है कि ओपी ऐसा कुछ कर रहा है। – TARKUS

+0

मैं ओपी हूं, और यह 3 साल पहले था :) –

+2

दूसरे दिन मैंने एक समस्या को गुगल किया। मैं एक स्टैक ओवरफ्लो पेज पर आया, और कोई कह रहा था, "मैंने ग्रेगरी लुईस का कोड इस्तेमाल किया, और यह काम किया।"मैं ग्रेगरी लुईस नाम के एक और लड़के के बारे में एक मजाकिया टिप्पणी छोड़ने जा रहा था, जब तक कि मैंने पृष्ठ को स्क्रॉल नहीं किया, और देखा कि वह मेरे द्वारा दिए गए उत्तर के बारे में बात कर रहा था। मुझे समस्या दो बार थी, और मुझे यह भी याद नहीं आया कि मैंने हल किया पिछले साल की समस्या है कि मैं कल के जवाब की तलाश में था। – TARKUS

0

आप इस ?:

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

मैं jQuery यूआई संवाद इस्तेमाल नहीं किया है की कोशिश की है, तो मुझे यकीन है कि वास्तव में काम करेंगे नहीं हूँ। ऐसा लगता है कि आपको बनाए गए संवाद के संदर्भ को बनाए रखने की आवश्यकता होगी ताकि आप संवाद को बंद करने के लिए इसका उपयोग कर सकें।

$('#someParentDOMElement' , window.parent); 
बेशक

, यह सब यह सोचते है कि आप जिस साइट iframe भीतर लोड मूल दस्तावेज़ के रूप में एक ही डोमेन पर है:

ध्यान दें, आप भी द्वारा माता-पिता के डोम में तत्वों के लिए दिखाई दे सकता है । यदि नहीं, तो आपके iframe में दस्तावेज़ को मूल DOM तक पहुंच नहीं होगी।

+1

मैंने '$ (window.parent) .dialog ('close') की कोशिश की;' यह काम नहीं किया लेकिन मैंने आपके संदर्भ को एक संदर्भ विचार लिया और इसे मेरे उत्तर में इस्तेमाल किया। धन्यवाद। –

+1

'$ (window.parent) .dialog ('close')' काम नहीं करता है क्योंकि 'window.parent' मूल जावास्क्रिप्ट विंडो ऑब्जेक्ट को संदर्भित करता है, jQuery UI संवाद तत्व नहीं। – cdmckay

6

सीधे शब्दों में बुला निम्नलिखित मेरे लिए काम किया:

window.parent। $ ('# बाहरीसाइट')। संवाद ('बंद करें');

+0

वास्तव में मेरे मामले में, मैं विज्मो संवाद (jQuery UI पर बनाया गया) का उपयोग कर रहा था और इसलिए मेरे पास बाहरी सामग्री (HTML) लोड करने वाला एक संवाद/पॉपअप था और उस बाहरी HTML के अंदर "रद्द करें" बटन दबाकर संवाद/पॉपअप को बंद करने का एक तरीका चाहिए .. इसलिए निम्नलिखित ने मेरे लिए अच्छी तरह से काम किया: window.parent। $ ('#eventdialog')। wijdialog ('close'); तो निश्चित रूप से #eventdialog मेरा चयनकर्ता था। विज्मो संवाद की नज़दीकी घटना के भीतर, आप तब भी कोई क्लीन-अप कोड जोड़ सकते हैं। उम्मीद है कि इससे मदद मिलती है –

संबंधित मुद्दे