2011-06-14 17 views
23

के संदर्भ कैसे प्राप्त करें मैं सभी पहले से खोले गए बच्चों की खिड़कियों के संदर्भ प्राप्त करना चाहता हूं। क्या कोई रास्ता है? मैं child = window.open(....) का उपयोग कर window.open(....) का उपयोग नहीं कर रहा हूं और एकाधिक बाल विंडो खोल रहा हूं।सभी पहले से खोले गए बच्चे विंडोज़

+0

यदि आप उन्हें बनाते समय उन्हें स्टोर नहीं करते हैं, तो बहुत देर हो चुकी है। – RobG

उत्तर

50

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

+1

अच्छी चाल के लिए उपरोक्त! – rahulmohan

+3

@ गोविंद: इस समाधान के लिए एक चेतावनी - यह एक हैक है और भविष्य में रखरखाव के मुद्दों को रोकने के लिए सबसे अच्छा बचा है। देखें: http://stackoverflow.com/questions/6223449/why-is-it-frowned-upon-to-modify-javascript-objects-prototypes/6223589#6223589 – rahulmohan

+0

सुनिश्चित करें! भविष्य के मुद्दों से बचने के लिए, मैंने 'window.open2() 'जैसे कुछ फ़ंक्शन को नामित करना बेहतर है :) और सभी मौजूदा' .open() 'कॉल को' .open2() 'में बदलने के लिए। लेकिन ऐसा लगता है कि @ गोविंद अपने कोड में कुछ भी नहीं बदलना चाहता ... –

15

मुझे विश्वास नहीं है कि आप तब तक कर सकते हैं जब तक आप विंडोज़ के नामों को नहीं जानते, जिसे मैं अनुमान लगा रहा हूं। निश्चित रूप से (आप उनके नाम जानते हैं, तो आप window.open("", "name") उपयोग कर सकते हैं उन्हें एक संदर्भ पाने के लिए।)

बेहतर विकल्प है,, संदर्भ पहली जगह   — में window.open से लौटे याद करने के लिए, लेकिन आप जानते हैं कि।

var openedWindows = []; 
window._open = window.open; // saving original function 
window.open = function(url,name,params){ 
    openedWindows.push(window._open(url,name,params)); 
    // you can store names also... 
} 

भागो window.open() कॉल करने से पहले इस कोड: :-)

+0

+1 अच्छा जवाब है, लेकिन मुझे इस तरह के दृष्टिकोण की आवश्यकता है। –

+0

@ गोविंद: समझा। दुर्भाग्यवश, रिटर्न वैल्यू को सहेजना या उन्हें निर्दिष्ट नामों को जानना ताकि आप उन्हें बाद में 'window.open ("", "name")' के साथ पुनर्प्राप्त कर सकें, मुझे नहीं लगता कि एक तीसरा विकल्प है। –

1

ठीक है, मैंने ओरेकल सीआरएम ऑन डिमांड में इस प्रश्न का उत्तर मूल विंडो से स्क्रिप्ट निष्पादित पॉपअप विंडो में एक चयन को अक्षम करने के लिए किया था, और यह काम किया! (मैं पॉपअप विंडोज़ की पीढ़ी पर कोई नियंत्रण नहीं है, वे आवेदन ढांचे द्वारा खोले जाते हैं)

चलो देखते हैं कैसे मैंने किया:

प्रसंग: एक विवरण पृष्ठ में उपयोगकर्ता द्वारा कुछ जानकारी जोड़ सकते हैं एक आवर्धक ग्लास आइकन में क्लिक करना >>> एक नई विंडो में एक खोज फ़ॉर्म होता है, लेकिन एक चयन प्रशासक को परेशान कर रहा है: यदि उपयोगकर्ता अपना डिफ़ॉल्ट मान बदलता है तो उसे वर्जित रिकॉर्ड तक पहुंच प्राप्त होगी !! हे भगवान!

पहला दृष्टिकोण: अक्षम करें कि अभी चुनें !!

प्रयास: मुझे अपने ब्राउज़र के देव उपकरण (एफ 12) के साथ छवि के ऑनक्लिक अट्रिब मिला। एक openAssocPopup विधि थी, और फिर मुझे बच्चे की खिड़की का नाम पता था: 'OccamPopup1' :)

ठीक है! तो चलो कुछ जादू (मूल खिड़की पर मार डाला) करते हैं:

window.open("","OccamPopup1").document.getElementById("frmSearch.AQ").setAttribute("disabled", true); 

मुझे लगता है कि इस मदद मिल सकती है, के रूप में यह सवाल भी मेरे लिए मदद की। तुम सही थे। अब मैं बच्चे के दस्तावेज़ ऑब्जेक्ट को पैरेंट की jQuery ऑब्जेक्ट में लपेटने की कोशिश कर रहा हूं, इसलिए मैं पूरे बच्चे के डोम तक पहुंच प्राप्त कर सकता हूं ... लेकिन यह एक और कहानी है ...

+1

यह किसी उपयोगकर्ता को या तो जावास्क्रिप्ट (उदा। URL बार से) का उपयोग करके फ़ील्ड मान को बदलने या फ़ील्ड को खोजने के तरीके के तरीके से देव उपकरण का उपयोग करने से नहीं रोकता है। यदि संभवतः 'वर्जित रिकॉर्ड' प्राप्त करना सर्वर-साइड कोड द्वारा रोका जाना चाहिए। मुझे पता है कि मैं एक पुरानी पोस्ट का जवाब दे रहा हूं, और मुझे लगता है कि आपने इन संभावनाओं पर विचार किया है और केवल एक ही उपलब्ध समाधान लिया है। हालांकि, मुझे लगता है कि यह महत्वपूर्ण है कि इस पर आने वाले अन्य लोग क्लाइंट-साइड-प्रोटेक्शन के जोखिम से अवगत रहें। – SimeonJM

+0

हां, आप सही हैं ... लेकिन ... 1.- ओरेकल सीआरएम ऑन डेमांड क्लाउड पर है, और जब तक हम कार्यक्षमता को अनुकूलित करने के लिए केवल कुछ सीमित टूल नहीं रखते हैं, तब तक हम jQuery के माध्यम से चीजें बदलते हैं। 2.-उपयोगकर्ता नए हैं, या जावास्क्रिप्ट nerds ... लगभग सभी ... मुझे लगता है कि वे हमारे जैसे सीआरएम हैकिंग समय बर्बाद नहीं करते हैं (हम उनके प्रदाता, देव टीम हैं) ... और मैं नहीं ' अगर वे करते हैं तो मन नहीं ...: पी धन्यवाद! –

0

आप विंडोज़ का उपयोग कर विंडोज़ का नाम सबसे अच्छा होगा एक उपसर्ग और एक काउंटर।

मैं अगर किसी नामित खिड़की (अर्थात CBCheckout) पहले से ही खुला था पता लगाने के लिए की जरूरत है और यह प्रयोग किया है:

var signupWindow = window.open('','CBCheckout','toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=1,height=1'); 
try { 
    if (signupWindow.document.location.href == "about:blank") { 
     signupWindow.close(); 
     signupWindow = undefined; 
    } 
} catch (e) { } 

यह नामित खुली खिड़की के संदर्भ में पुनः कब्जा। यदि यह अस्तित्व में नहीं था, तो आप एक सेकंड के लिए एक छोटी खिड़की पॉपअप देखेंगे।

यदि आप खिड़कियों के संभावित नामों को जानते हैं, तो आप नामों के माध्यम से चक्र का पता लगा सकते हैं, उन्हें ढूंढने का प्रयास कर सकते हैं।

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