2010-01-22 9 views
12

मैं एक वेब एप्लिकेशन विकसित कर रहा हूं जो windows.open (..) का उपयोग करके पॉपअप खोलता है। मुझे "window.open" द्वारा दिए गए हैंडल का उपयोग करके खुले विंडो पर एक फ़ंक्शन कॉल करने की आवश्यकता है, लेकिन मुझे हमेशा त्रुटि संदेश मिल रहा है "addWindow.getMaskElements फ़ंक्शन नहीं है", जैसे कि यह घोषित फ़ंक्शन तक नहीं पहुंच सका बाल खिड़की पर यह आईई और एफएफ दोनों में व्यवहार है। मेरे कोड इस तरह दिखता है:जावास्क्रिप्ट, सलामी बल्लेबाज से बाल विंडो फ़ंक्शन को कॉल नहीं करता

function AddEmail(target,category) 
{ 
    if(addWindow == null) 
    { 
     currentCategory = category; 
     var left = getDialogPos(400,220)[0]; 
     var top = getDialogPos(400,220)[1]; 
     addWindow = window.open("adicionar_email.htm",null,"height=220px, width=400px, status=no, resizable=no"); 
     addWindow.moveTo(left,top); 
     addWindow.getMaskElements(); 
    } 
} 

मैं googled है और विभिन्न विश्वसनीय स्रोतों से पढ़ सकते हैं और जाहिरा तौर पर इस काम करने के लिए माना जाता है, लेकिन यह नहीं करता है। एक और बात, बाल विंडो में फ़ंक्शंस को एक अलग .js फ़ाइल में घोषित किया गया है जो adicionar_email.htm फ़ाइल में शामिल है। क्या इससे कोई फर्क पड़ता है? यह नहीं होना चाहिए .. तो, अगर कोई भी इसी तरह की समस्या में भाग गया है, या मुझे यह पता है कि मैं क्या गलत कर रहा हूं, तो कृपया इस संदेश का जवाब दें। अग्रिम धन्यवाद।

कीनिया

+0

क्या 'चाल चलाना' बिल्कुल काम करता है? दूसरे समारोह के लिए, शायद एक दौड़ की स्थिति है; यदि आप '.getMaskElements' के अस्तित्व के लिए प्रतीक्षा करने के लिए टाइमर सेट करते हैं, तो क्या यह कभी पूरा हो जाता है? – Anonymous

उत्तर

11

खिड़की निर्माण एक अवरुद्ध आपरेशन नहीं है; स्क्रिप्ट चालू हो रही है जबकि वह विंडो एचटीएमएल & जावास्क्रिप्ट खोल रही है और इसे पार्स कर रही है।

आप इस तरह अपने वास्तविक पृष्ठ पर एक लिंक जोड़ने के थे, तो:

<a href="#" onclick="addWindow.getMaskElements();">Test</a> 

आप यह काम करता है देखना चाहते हैं।

function AddEmail() 
{ 

     if(addWindow == null) { 
     addWindow = window.open("test2.html",null,"height=220px, width=400px, status=no, resizable=no"); 
     } 

     if(!addWindow.myRemoteFunction) { 
      setTimeout(AddEmail,1000); 
     } else { addWindow.myRemoteFunction(); } 
} 

यह रखता है: (। मैं इसे करने की कोशिश की बस सुनिश्चित करने के)

** संपादित करें **

कोई और लक्ष्य दस्तावेज़ में एक ऑनलोड को फोन करके एक समाधान तैनात है, यहाँ एक और तरीका है addWindow.myRemoteFunction को कॉल करने की कोशिश कर रहा है हर 1 सेकंड तक यह सफलतापूर्वक इसे कॉल करने का प्रबंधन करता है।

1

आप विंडो खोलने के तुरंत बाद फ़ंक्शन को कॉल कर रहे हैं; पॉपअप पर पृष्ठ अभी तक लोड नहीं किया जा सकता है, इसलिए फ़ंक्शन उस बिंदु पर परिभाषित नहीं किया जा सकता है।

5

समस्या यह है कि window.open काफी तेज़ी से लौटाता है, अनुरोध किया गया दस्तावेज़ और फिर उस दस्तावेज़ को बाद में संदर्भित करने वाले किसी भी अन्य आइटम को विंडो में लोड नहीं किया जाएगा।

इसलिए इस विधि को इतनी जल्दी कॉल करने का प्रयास विफल हो जाएगा। आपको खुले विंडो के लोड इवेंट में एक फ़ंक्शन संलग्न करना चाहिए और आपको उस फ़ंक्शन से कॉल करने का प्रयास करना चाहिए।

2

नीचे एक के साथ समस्या है:

जब जावास्क्रिप्ट माता पिता विंडो में निष्पादित किया जा रहा है, चाइल्ड विंडो लोड हो रहा है नहीं है। इसलिए, पैरेंट विंडो से आक्रमणकारी कार्य अनंत लूप में है और यह खिड़की को दुर्घटनाग्रस्त कर रहा है।

विंडो निर्माण अवरुद्ध करने वाला ऑपरेशन नहीं है; स्क्रिप्ट निष्पादित करने के लिए जारी है जबकि वह विंडो खुलती है और HTML & जावास्क्रिप्ट को लोड और लोड कर रही है।

आप इस तरह अपने वास्तविक पृष्ठ पर एक लिंक जोड़ने के थे, तो:

<a href="#" onclick="addWindow.getMaskElements();">Test</a> 

आप यह काम करता है देखना चाहते हैं।

function AddEmail() 
{ 

     if(addWindow == null) { 
     addWindow = window.open("test2.html",null,"height=220px, width=400px, status=no, resizable=no"); 
     } 

     if(!addWindow.myRemoteFunction) { 
      setTimeout(AddEmail,1000); 
     } else { addWindow.myRemoteFunction(); } 
} 

यह: (। मैं इसे करने की कोशिश की बस सुनिश्चित करने के)

** संपादित करें **

कोई और लक्ष्य दस्तावेज़ में एक ऑनलोड को फोन करके एक समाधान तैनात है, यहाँ एक और तरीका है addWindow.myRemoteFunction को कॉल करने का प्रयास करता रहता है हर 1 सेकंड जब तक यह इसे सफलतापूर्वक कॉल करने का प्रबंधन करता है।