2012-11-11 19 views
11

मेरा मुख्य लक्ष्य है:मैं कैसे अपनी मूल विंडो पर बच्चे विंडो से एक ईवेंट भेज सकते हैं

अपने आवेदन लिए जा रहे हैं, एक नए टैब में वहाँ एक लिंक को खोलने, नए टैब में कुछ बनाने के लिए और एक घटना भेजने रीफ्रेश करने के लिए पैरेंट-मुख्य टैब पर।

2 तकनीक है कि वास्तव में ऐसा नहीं करता कि मैं क्या जरूरत है सीखा है:

  1. postMessage - जहाँ तक मैं केवल आइफ्रेम पर और
  2. window.opener टैब पर नहीं पता काम करता है - केवल काम करता है window.open (url) के साथ जो केवल नई विंडो खुलता है और नया टैब नहीं।

मैं टैब का उपयोग करके बच्चे से अभिभावक को एक ईवेंट कैसे पास कर सकता हूं? मैं अभिभावक और बच्चे में जावास्क्रिप्ट कोड के लिए एक विशिष्ट उदाहरण के लिए खुश रहूंगा। इसे क्रॉस-डोमेन के लिए काम करना चाहिए (उदाहरण के लिए: www.mydomain.com और bills.mydomain.com)।

क्या कोई jQuery समाधान है जो मुझे याद नहीं है?

+1

मेरा मानना ​​है कि 'window.open' को एक नया _Window_ ऑब्जेक्ट वापस करना चाहिए और यदि आप एक ही मूल नीति के साथ समस्याओं में नहीं चल रहे हैं, तो आप इस ऑब्जेक्ट पर अभिभावक से श्रोता संलग्न करने या अंतराल सेट करने में सक्षम हो सकते हैं कुछ चर के लिए जांच करता है। –

+0

@PaulS।, यह window.open नए टैब में नहीं खुलता है। – Alon

+0

@Alon यह फ़ायरफ़ॉक्स में करता है। –

उत्तर

6

निम्नलिखित काम करता है window1 करने के लिए (अधिक ब्राउज़रों का परीक्षण नहीं किया है)

3 दस्तावेजों

  1. मान (JSON implemeted www.mydomain.com/parent.html) पेज है कि लिंक
  2. (bills.mydomain.com/child.html) पेज कि कड़ी से खोला जाएगा साथ 'main'-दस्तावेज़
  3. (www.mydomain.com/dispatcher.html) बाद में

पहली बार में विस्तार से बताया parent.html बनाने में mydomain.com

<script> 
document.domain="mydomain.com"; 
</script> 

करने के लिए सभी 3 दस्तावेजों के डोमेन-गुण सेट उदाहरण के साथ नाम-संपत्ति के साथ एक छिपी हुई आईफ्रेम "Hiddenframe"। कुछ फ़ंक्शन भी बनाएं जो बाद में प्रतिक्रिया प्राप्त कर सकें।

parent.html अब इस तरह दिखना चाहिए:

<script> 
document.domain="mydomain.com"; 
function fx(msg)//receives the response 
{ 
    alert(msg) 
} 
</script> 
<iframe name="hiddenframe" style="display:none"></iframe> 
<a href="http://bills.mydomain.com/child.html" target="_blank">click</a> 

child.html में आप अब parent.html अंदर छिपा iframe में एक दस्तावेज़ को लोड करने में सक्षम हो जाएगा

<script> 
document.domain="mydomain.com"; 
window.open('http://www.mydomain.com/dispatcher.html','hiddenframe'); 
</script> 

(window.open() के उपयोग के मामले में भ्रमित न हों, वहां एक नई विंडो नहीं खुल जाएगी, पेज parent.html में iframe में लोड हो जाएगा)


dispatcher.html में आप अब माता-पिता के अंदर समारोह कह सकते हैं।एचटीएमएल

<script> 
document.domain="mydomain.com"; 
parent.fx('you just got some response'); 
</script> 

जब आप केवल parent.html यह एक छोटा सा आसान है फिर से लोड करने की जरूरत है।

फिर parent.html और child.html में document.domain-संपत्ति (आप parent.html में आइफ्रेम और dispatcher.html जरूरत नहीं है)

parent.html में भी सेट सेट खिड़की का नाम-संपत्ति, उदाहरण के लिए

<script> 
    window.name="parentTab"; 
</script> 

child.html में आप अब parentTab -window (टैब) में पहुंच सकते

<script> 
    document.domain="mydomain.com"; 
    window.open('http://www.mydomain.com/parent.html','parentTab'); 
</script> 

... या बस बच्चे में एक लिंक या रूप का लक्ष्य प्रॉपर्टी के रूप में "parentTarget" का उपयोग करें। एचटीएमएल

0

मैं खुद के लिए क्या किया था, मैं डेटाबेस में window2 से बदलाव जमा कुछ ajax implemeted। मैं डेटाबेस वापस से नए डेटा खींचने के लिए क्रोम, फ़ायरफ़ॉक्स, यानी मेरे लिए

0

कैसे similar questions केवल window.open के बारे में (जो आप का उपयोग नहीं करना चाहते हैं) बात देख कर और के रूप में afaik वहाँ आप क्या चाहते हैं के लिए get all windows on the same domain करने के लिए कोई आसान तरीका है, आप शायद यह करने के लिए अपनी खुद की रूपरेखा लिखने की ज़रूरतका उपयोग कर 210।
मुझे नहीं लगता कि आपको इसके साथ सबडोमेन तक पहुंच प्राप्त होगी और निश्चित रूप से अन्य डोमेन के लिए नहीं। खिड़की विशेष संदेश के लिए


प्रैक्टिकल विचारों गुजर का उपयोग कर sessionStorage ..
आप यूआरएल (जीईटी) तो एक तरीके से काम पारित कर सकते हैं संदेशों पारित करने के लिए हो सकता है माता-पिता ही parentID के लिए एक विशिष्ट आईडी उत्पन्न करने के लिए , यदि आप पर ध्यान नहीं देते हैं तो sessionStorage संदेशों को सहेजने पर (जिसे parentID के साथ यूआरएल में का उपयोग कर रहे हैं, या एक छिपे हुए फ़ील्ड के साथ यूआरएल में डाला गया है) पर क्लिक करें। माता-पिता parentID.childID.timeStamp जैसी चाबियों का उपयोग करते हुए, माता-पिता और बच्चे दोनों में अंतराल है जो sessionStorageके लिए दिखता है खिड़की की आईडी से शुरू, फिर ., (यानी। अभिभावक parentID. के लिए देखता है) एक मैच पर कुंजी & एक नए var के लिए मूल्य कॉपी करें, हटाएं (इसलिए यह फिर से नहीं मिलता है) और फिर वांछित के रूप में पार्स करें।

मुझे पता है कि यह थोड़ा सा शब्द है लेकिन मुझे लगता है कि कामकाजी उदाहरण कोड लिखने की तुलना में अवधारणा के रूप में व्याख्या करना अधिक आसान है।

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