2010-03-16 16 views
18

खोला हम निम्नलिखित स्थिति मिल गया है, किसी एक डोमेन से चल:विंडो खोजें पहले से window.open

पृष्ठ एक window.open() का उपयोग करता है एक नामित खिड़की (एक पॉपअप खिलाड़ी) खोलने के लिए। window.open() पृष्ठ ए को विंडो का संदर्भ देता है।

उपयोगकर्ता अब पृष्ठ ए को फिर से लोड करता है। नामित विंडो का संदर्भ खो गया है। विंडो को "ढूंढने" के लिए window.open() का उपयोग करके इसे पुनः लोड करने का दुर्भाग्यपूर्ण दुष्प्रभाव है (अवांछनीय)। क्या इस विंडो का संदर्भ पाने का कोई और तरीका है?

+0

वाह वहाँ एक और सवाल है जो लगभग आज सुबह खोला गया है। – Pointy

+2

क्या आप इसे यहां पोस्ट कर सकते हैं? मुझे यह नहीं मिला। – spender

उत्तर

23

इस प्रयास करें:

var playerUrl = 'http://my.player...'; 
var popupPlayer= window.open('', 'popupPlayer', 'width=150,height=100') ; 
if(popupPlayer.location.href == 'about:blank'){ 
    popupPlayer.location = playerUrl ; 
} 
popupPlayer.focus(); 

यह एक अद्वितीय नाम के साथ एक खाली विंडो खुलेगा। चूंकि यूआरएल खाली है, विंडो की सामग्री को पुनः लोड नहीं किया जाएगा।

+0

यह बहुत अच्छा लग रहा है। जब मुझे मौका मिलता है तो कोशिश करूंगा। – spender

+0

यह चाल है। आपने धमाल मचाया। धन्यवाद। – spender

+2

popupPlayer.location के बजाय मैं popupPlayer.location.href का उपयोग करने की सलाह देता हूं। यह === के बजाय === का उपयोग करते समय समस्या से बचाता है (उदाहरण के लिए कॉफीस्क्रिप्ट स्वचालित रूप से करता है)। – Philipp

0

असल में आपने जो किया है वह बनाई गई विंडो (पॉपअप) के अभिभावक (पृष्ठ ए) को नष्ट कर देता है, इसलिए इसका मूल अभिभावक का कोई और संदर्भ नहीं है इसलिए आपको प्रत्यक्ष संदर्भ नहीं मिल सकता है।

एकमात्र समाधान जो मैं सोच सकता हूं वह एक ब्राउज़र का उपयोग कर रहा है जो आपको सक्रिय विंडोज़ (टैब) के माध्यम से चक्र के लिए जावास्क्रिप्ट क्षमता जोड़ता है और उस व्यक्ति को ढूंढता है जिसमें एक विशेष संपत्ति है (यानी: आपका पुनः लोड किया गया पृष्ठ ए) जिसे मान्यता प्राप्त होती है पॉप अप।

दुर्भाग्य से मुझे लगता है कि केवल फ़ायरफ़ॉक्स में कुछ अतिरिक्त क्षमता या विस्तार है जो आपको यह लचीलापन देता है। (यह भी एक सुरक्षा जोखिम है, हालांकि)

+0

कोई पासा नहीं। एक्स-ब्राउजर होने की आवश्यकता है। – spender

+0

तब यह "नहीं जाना" है। :( – OverLex

1

AFAIK, कोई वहाँ नहीं है ..

एक तरह के- गंदा-लेकिन-ए-लगता है कि यह इच्छा काम हैक समय-समय पर पुनर्स्थापित करने के लिए किया जाएगा पॉपअप window.opener का उपयोग कर के भीतर से माता-पिता की खिड़की पर संदर्भ, इस कोड की तरह कुछ के साथ:

 

    setInterval(function() { 
     if(window.opener) { 
      window.opener.document.myPopupWindow = window 
     } 
    }, 100) 

माता पिता विंडो में, आप document.myPopupWindow तक पहुँचने के लिए, एक बार पुनः लोड करने के बाद भी कर सकेंगे (अच्छी तरह से , रीलोड के बाद 100ms)। यह क्रॉस ब्राउज़र काम करना चाहिए।

+4

मुझे अभी भी संदेह है कि window.opener फिर से लोड होने के बाद एक वैध संदर्भ होगा ... – Alsciende

+0

यह है, मैंने जांच की है। जब उद्घाटन विंडो बंद हो जाती है, तो आपके पास प्रति सेकंड 10 नलपॉइंटर्स होंगे उपरोक्त कोड। इसे शून्य के लिए जांचने के लिए संशोधित किया गया है :) –

+0

अच्छा कोड, फिर। – Alsciende

1

यह काम करना चाहिए। पॉपअप में यह कोड जोड़ें:

function updateOpener() { 
    if (window.opener) 
     window.opener.document.myPopupWindow = window; 
    else 
     setTimeout(updateOpener, 100); 
} 

updateOpener(); 

और यह पैरेंट विंडो के अधिभार में है। यह सुनिश्चित करने के लिए कि MyPopupWindow को एक्सेस करने से पहले 100 एमएस प्रतीक्षा कर दिया गया है।

setTimeout(function() { 
    if (document.myPopupWindow) 
     document.myPopupWindow.focus(); 
}, 100); 
संबंधित मुद्दे