2009-05-07 7 views
5

मुझे निम्नलिखित उपयोग के लिए एक क्रॉस-ब्राउज़र समाधान की आवश्यकता है: उपयोगकर्ता हमारे पृष्ठों में से एक पर "निर्यात" बटन क्लिक करता है, जो किसी फ़ॉर्म के साथ पॉपअप खोलता है। फॉर्म सबमिट करने पर, उपयोगकर्ता को बाइनरी फ़ाइल डाउनलोड (उदाहरण के लिए एक सीएसवी फ़ाइल) प्राप्त करनी चाहिए, और पॉपअप को मूल विंडो की दृश्य सामग्री को बदले बिना बंद करना चाहिए।कैसे प्रदान किया जाता है (आईई और फ़ायरफ़ॉक्स में) एक पॉपअप में एक बाइनरी फ़ाइल डाउनलोड बंद करता है?

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

मूल रूप से पॉपअप में एक स्क्रिप्ट थी जो डाउनलोड फ़ाइल यूआरएल में window.location सेट करता है। वह पॉपअप को बंद कर देता है।

तो मैंने पैरेंट विंडो में एक छिपी आईफ्रेम डालने की कोशिश की और पॉपअप को self.close() को कॉल करने से पहले डाउनलोड यूआरएल में iFrame का src सेट किया। यह फ़ायरफ़ॉक्स में पूरी तरह से काम करता है, लेकिन आईई पूरी तरह से सुरक्षा प्रतिबंधों के साथ उलझन में है।

क्या ऐसा करने का कोई सही तरीका है? आईई पर काम करने के तरीके के बारे में कैसे?


अपडेट - समस्या

हल जवाब यहां प्रस्तावित बहुत दूर बंद नहीं थे, लेकिन मेरी समस्या एक सा सिर्फ एक जावास्क्रिप्ट मुद्दा जा रहा है की तुलना में अधिक जटिल था। मुझे आईई और एक्सेल के साथ बग का सामना करना पड़ा (क्योंकि डाउनलोड फ़ाइल सीएसवी है), और पॉपअप एक फॉर्म पोस्ट कर रहा था।

मैं यूआरएल में फॉर्म डेटा को जोड़ने के बिना समस्या को हल नहीं कर सकता (एक पोस्ट के बजाय जीईटी के लिए), और मुझे साइट को आईई में भरोसेमंद सेट करना है (यह एक एंटरप्राइज़ ऐप है, इसलिए यह उचित है उपयोगकर्ताओं को बनाने का अनुरोध)।

फॉर्म बटन के क्लिक पर, पॉपअप विंडो और ओपनर पर एक समारोह को कॉल करता है, जो फ़ॉर्म और उसके एक्शन यूआरएल में गुजरता है। फिर पॉपअप window.close() कॉल करता है। फ़ंक्शन यूआरएल में फॉर्म डेटा जोड़ता है और नए यूआरएल में विंडो.लोकेशन सेट करता है (आईफ्रेम विचार आईई में कभी भी अच्छा काम नहीं करता है और स्पष्ट रूप से जरूरी नहीं था)।

फॉर्म यूआरएल के जवाब में, अनुरोध शीर्षलेखों में सामग्री-प्रकार: एप्लिकेशन/ऑक्टेटस्ट्रीम और सामग्री-विस्थापन "," अनुलग्नक शामिल है; फ़ाइल नाम = filename.csv "।

+0

क्या यह मूल पृष्ठ पर फ़ॉर्म डालने के लिए काम करेगा या नए पेज को आईफ्रेम में खोलने के लिए निर्देशित करेगा (जिसे स्क्रिप्ट से उत्पन्न किया जा सकता है)? – Anonymous

+0

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

+0

मैं फॉर्म को आईफ्रेम पर सबमिट करने की सोच रहा था, जो लापरवाही पॉपअप समस्या से छुटकारा पाता है। – Anonymous

उत्तर

0

यह एक समस्या दृष्टिकोण करने के लिए रास्ता हो सकता है।

1) पॉपअप प्रपत्र ऑनसबमिट एक तिहाई खिड़की करने के लिए एक window.open करता है एक पृष्ठ है कि एक रिक्त पृष्ठ है खुलती कि बस डाउनलोड की गई फ़ाइल देता है।

2) पॉपअप फार्म पर अपने जावास्क्रिप्ट में, आप window.open करना सही होने के बाद, अपने माता पिता के खिड़की (1 विंडो) विधि पॉपअप प्रपत्र सबमिट बंद कर देता है कि कहते हैं।

3) तीसरे पृष्ठ पर, जो केवल वह पृष्ठ है जो फ़ाइल लौटाता है, आप फ़ाइल को वापस करने के लिए अपनी हेडर फ़ाइल में सामग्री-स्वभाव अन्यथा, तो पृष्ठ वास्तव में खुला नहीं होगा।

यहां आपके द्वारा आवश्यक शीर्षलेख पर कुछ जानकारी दी गई है। कोड क्लासिक प्रागैतिहासिक एएसपी में है, लेकिन आपको जो चाहिए उसे पूरा करने में सक्षम होना चाहिए।

http://classicasp.aspfaq.com/general/how-do-i-prompt-a-save-as-dialog-for-an-accepted-mime-type.html

आशा है कि मदद करता है।

+0

मुझे यकीन नहीं है कि चरण 1 मेरे मामले में काम करेगा, क्योंकि पॉपअप में फॉर्म सबमिशन वास्तव में फ़ाइल को डाउनलोड करने और नाम देने के लिए उत्पन्न करता है। जब तक मुझे इस सबमिशन के नतीजे नहीं मिलते, मैं तीसरी विंडो नहीं खोल सकता क्योंकि मुझे डाउनलोड यूआरएल नहीं पता है। यह एक हल करने योग्य समस्या है, लेकिन मैं उम्मीद कर रहा था कि फ़ाइल डाउनलोड सर्वलेट को स्वयं छूना न पड़े, क्योंकि यह हमारे विकास चक्र में देर से एक बग फिक्स है। –

1

क्या आपने आईफ्रेम समाधान में वास्तव में पैरेंट विंडो के अंदर एक विधि को कॉल करने की कोशिश की है, जो बदले में आईफ्रेम का स्थान निर्धारित करेगा? क्योंकि यह मेरे परीक्षण में काम किया मैं पूछ रहा हूँ:

जनक विंडो

<html> 
<head> 
<script type="text/javascript"> 
var w; 

var download = function() { 
    document.frames[0].location = "test.php"; 
    w.close(); 
}; 

var o = function() { 
    w = window.open("test2.html", "window_name"); 
    return false; 
}; 
</script> 
</head> 
<body> 

<a href="#" onclick="return o();">open</a> 

<iframe></iframe> 

</body> 
</html> 

पॉपअप विंडो

<html> 
<head> 
<script type="text/javascript"> 
var download = function() { 
    window.opener.download(); 
    return false; 
}; 
</script> 
</head> 
<body> 

<a href="#" onclick="return download();">download</a> 

</body> 
</html> 

test.php सिर्फ एक पेज है कि एक फ़ाइल मजबूर करता है डाउनलोड के लिए, और कृपया ध्यान दें कि उपर्युक्त कोड IE विशिष्ट है क्योंकि मैं document.frames ऑब्जेक्ट का उपयोग कर रहा हूं, लेकिन इसे आसानी से क्रॉस-ब्राउज़र बनाया जा सकता है।

+0

मूल पृष्ठ की पीढ़ी के समय, फ़ाइल डाउनलोड यूआरएल ज्ञात नहीं है। मुझे लगता है कि इसे डाउनलोड() फ़ंक्शन में पास किया जा सकता है। मुझे यह कोशिश करनी होगी (अगले सप्ताह के शुरू में, मेरे शेड्यूल के कारण)। –

+0

सलामी बल्लेबाज में डाउनलोड() फ़ंक्शन डालने से चीजों को ठीक नहीं किया गया। आईई अभी भी डाउनलोड प्रक्रिया पूरी तरह से ब्लॉक और पूरी तरह से उलझन में है। मेरे लिए अगला कदम पॉपअप की बजाय iFrame में फ़ॉर्म लोड करने का प्रयास करना है। –

+0

आईई का कौन सा संस्करण? –

-1

इसके लिए कोई सही समाधान नहीं है। जब आईई में फ़ाइल डाउनलोड होता है तो इसका पॉपअप और फ़ायरफ़ॉक्स में यह सीधे डाउनलोड किया जाता है

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

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