जावास्क्रिप्ट window.open अवलोकन जब खिड़की पहले से ही प्रोटोटाइप का उपयोग कर मौजूद है

वोट
1

मैं एक अजीब परिदृश्य जिसमें विंडो.ओपन () 'लोड' घटना को ट्रिगर नहीं करता है, तो वास्तविक विंडो स्क्रीन पर पहले से ही है का सामना करना पड़ा।

सार
मुझे लगता है कि जब क्लिक कुछ जावास्क्रिप्ट चलाता है और एक नई विंडो में एक पृष्ठ खोलता है एक बटन होता है। स्टैंडर्ड कोड है कि किसी भी जे एस डेवलपर देखा गया है। जब विधि (एक बड़ा वर्ग का हिस्सा) कहा जाता है, यह जाँच करता है अगर यह विंडो (this.preview_window) के लिए एक संदर्भ है। यदि हां, तो यह this.up चलेगा, यह कोशिश करते हैं और इसे फिर से खुल जाएगा। एक बार जब यह खुला है, यह उस खिड़की पर एक अद्यतन विधि चलाता है।

समस्या
खिड़की मौजूद नहीं है, सब कुछ उम्मीद के रूप में चलाता है। खिड़की में मौजूद है लेकिन वर्ग इसे करने के लिए एक संदर्भ नहीं है, तो संदर्भ के साथ सफलतापूर्वक window.open (), हालांकि अद्यतन समारोह बुलाया नहीं प्राप्त करता है का अधिग्रहण किया है।

प्रासंगिक कोड

// This code is run whenever there is no reference to the window
this.preview_window = window.open('/folder/page.php','page_previewer');
Event.observe(this.preview_window, 'load',this.update.bindAsEventListener(this));

कोड के बाकी भारी परीक्षण किया गया है तो मैं काफी विश्वास है कि मैं कैसे लोड घटना काम करता है में कुछ याद कर रहा हूँ कर रहा हूँ। window.open () और अद्यतन () फ़ंक्शन संचालित सभी मामलों लेकिन इस एक में अपेक्षा के अनुरूप।

12/05/2009 को 21:52
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


2 जवाब

वोट
1

मेरा अनुमान है कि जब बाध्यकारी होता है कि या तो चाइल्ड विंडो एक अलग डोमेन में है, या यह कैश से लोड कर रहा है से पहले लोड होता है। अपने एक 500ms समाप्त हो बंधन डालने का प्रयास करें। आप बच्चे को खिड़की के यूआरएल को नियंत्रित करते हैं, तो यह बच्चे से माता-पिता को फोन करने के आसान होगा। वैकल्पिक रूप से पास और फिर से खुला।

if (this.preview_window && !this.preview_window.closed)
  this.preview_window.close();
... open window ... 
14/05/2009 को 09:42
का स्रोत उपयोगकर्ता

वोट
1

मैं इस एक छोटा सा के साथ प्रयोग किया और ऐसा लगता समस्या कुछ पिछले जवाब का संकेत था है - अगर आप पहले से ही (एक खिड़की विंडो.ओपन को कॉल खोलने है) लोड घटना सक्रिय नहीं होगा। इसलिए, आप अनिवार्य रूप से पूर्वावलोकन विंडो हर बार अपने बटन के लिए ईवेंट हैंडलर आदेश सुनिश्चित करें कि लोड गतिविधि सक्रिय की जाएगी और इस कारण आपके अद्यतन हैंडलर भी कहा जा सकता है बनाने के लिए कहा जाता है ताज़ा करने के लिए की जरूरत है। यहाँ कोड मैं इस प्रदर्शन करने के लिए प्रयोग किया जाता है:

var preview_window;

function openPreviewWindow() {
    if (preview_window) {
        preview_window.close(); //Load will not fire unless we close the window first
    }
    preview_window = window.open('/', 'preview_window');
    Event.observe(preview_window, 'load', function () {
        alert('Updating opened window.');
    }.bindAsEventListener(this));
}

<a href="#" onclick="openPreviewWindow()">Open Preview Window</a>

यह बहुत शिक्षाप्रद नहीं हो सकता है, लेकिन उम्मीद है कि यह एक अधिक आशाजनक पथ पर आप तय करता है।

13/06/2009 को 07:58
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more