2009-04-07 13 views
7

मैं जावास्क्रिप्ट से फ़ाइल डाउनलोड शुरू करने के सर्वोत्तम तरीके के बारे में कुछ और विचार ढूंढ रहा हूं।एक फ़ाइल डाउनलोड शुरू करना जो आईई में भी अच्छा काम करता है?

  • एक मेटा रिफ़्रेश हैडर
  • साथ
  • उपयोग window.location.replace() एक पेज
  • उपयोग एक iframe src पर सेट करें:

    Best way to initiate a download? जो संक्षेप किया जा सकता है अच्छा विचारों का एक बहुत है

  • एक window.open() का प्रयोग करें
  • सर्वर सीधे आउटपुट फ़ाइल है, सामग्री-प्रकार और सेटिंग सामग्री-विन्यास

उन सभी दृष्टिकोणों का उपयोग उन ब्राउज़रों के लिए ठीक काम करता है जिनके साथ मैं परीक्षण कर रहा हूं, IE8 को छोड़कर।

  • आइफ्रेम क्योंकि पर्यावरण मैं उपयोग कर रहा हूँ द्वारा निर्धारित कुकीज़ के काम नहीं कर रहा: IE8 के साथ, मैं समस्याओं का एक गुच्छा मिलता है। मुझे लगता है कि मुझे इसे हल करने के लिए पी 3 पी हेडर सक्षम करने की आवश्यकता होगी, लेकिन पर्यावरण मुझे हेडर सेट करने की इजाजत नहीं देता है, इसलिए पी 3 पी
  • window.location.replace() IE8 में छोड़कर काम करता है, खिड़की का पता बार फ़ाइल में यूआरएल में बदलता है और अंतर्निहित विंडो रिक्त डाउनलोड की गई फ़ाइल खोले जाने के बाद
  • मेटा रीफ्रेश दृष्टिकोण भी काम करता है, लेकिन फिर भी पता बार फ़ाइल के यूआरएल में बदल जाता है और अंतर्निहित विंडो रिक्त फ़ाइल डाउनलोड के बाद
  • मैं खिड़की से बचने की कोशिश कर रहा हूं .open() से किसी भी पॉपअप ब्लॉक को चकमा दें केर समस्याओं
  • सर्वर वातावरण मैं तैयार हूं आप उत्पादन के लिए फ़ाइल ही है, जैसे आप में ASP.NET के रिस्पांस वस्तु

कर सकता है कहते हैं, की अनुमति नहीं होगी मैं भी इन तरीकों प्रयास नहीं किया है आईई 6 या आईई 7 के साथ, इसलिए वहां अन्य आश्चर्य हो सकते हैं।

तो क्या किसी के पास आईई में डाउनलोड शुरू करने के लिए कोई अन्य सुझाव है, जहां (1) कोई पॉपअप शामिल नहीं है और (2) फ़ाइल को सहेजा या खोला जा सकता है और (3) कोई रिक्त विंडो पीछे नहीं छोड़ी गई है, (3) सिर्फ जावास्क्रिप्ट, एचटीएमएल और एक फाइल के लिए एक यूआरएल का उपयोग कर?

<script type="text/javascript"> 
    window.onload= function() { 
     window.location= document.getElementById('downloadlink').href; 
    } 
</script> 
<p> 
    Your download will begin shortly. If it doesn't, 
    <a id="downloadlink" href="file.zip">click here</a>. 
</p> 

या एक साथ एक ही बजाय मेटा ताज़ा:

डेनवर माइक

+0

क्या आप सर्वर के वातावरण पर विस्तार कर सकते हैं? –

+0

हाय जोएल, यह Salesforce.com सर्वर पर चलाने के लिए बनाया जा रहा है - उनके पास एपेक्स नामक अपनी प्रोग्रामिंग भाषा है। –

उत्तर

5

एक डाउनलोड फ़ाइल पेज के लिए सामान्य पैटर्न (यदि आप एक होना चाहिए व्यक्तिगत रूप से मैं उन्हें नफरत है) या तो है लिपि का। किसी भी तरह से वही व्यवहार करना चाहिए।

मेटा रिफ़्रेश दृष्टिकोण भी काम करता है, लेकिन फ़ाइल का URL और अंतर्निहित खिड़की करने के लिए अभी भी पता पट्टी परिवर्तन फ़ाइल डाउनलोड

कि ऐसा नहीं होना चाहिए के बाद खाली है। क्या कोई संस्करण ऑनलाइन है जिसका परीक्षण किया जा सकता है? आम तौर पर, जब ब्राउज़र को किसी भी सामान्य विधि (लिंक क्लिक, location.href, मेटा-रीफ्रेश) द्वारा प्रत्यक्ष फ़ाइल डाउनलोड पर धक्का दिया जाता है, तो उसे पिछले पृष्ठ को स्क्रीन पर रखना चाहिए।

पर्यावरण, मुझे हेडर स्थापित करने के लिए अनुमति नहीं है तो पी 3 पी बाहर है

आप हेडर का उपयोग करने के लिए पी 3 पी नीतियां निर्धारित करने की जरूरत नहीं है, एक HTML < लिंक> टैग बस के रूप में अच्छी तरह से काम :

<link rel="P3Pv1" href="/policy.p3p" /> 

लेकिन आपको इसकी आवश्यकता क्यों होगी? यदि लक्ष्य यूआरएल सिर्फ फाइल की सेवा कर रहा है, तो कुकी को सेट करने की कोई जरूरत नहीं है, तो पी 3 पी से परेशान क्यों करें?

मैं सख्त किसी भी पॉपअप अवरोधक समस्याओं चकमा करने के लिए window.open() से बचने के लिए कोशिश कर रहा हूँ

आप विंडो.ओपन() एक उपयोगकर्ता क्लिक करने पर, वहाँ कोई पॉपअप कर रहे हैं अवरोधक समस्याएं

ऐसा नहीं है कि आपको किसी भी फ़ाइल को डाउनलोड करने के लिए पॉप-अप खोलने की आवश्यकता होनी चाहिए। मुझे लगता है कि फ़ाइल डाउनलोड गंतव्य के बारे में कुछ अजीब बात है जो आप लिंक कर रहे हैं - जैसे कि यह फ़ाइल डाउनलोड नहीं है लेकिन कुछ प्रकार के विषम HTML वेब ऐप पर है। डाउनलोड से लिंक करना कठिन नहीं है, आप बस फाइल से लिंक करते हैं, काम पूरा करते हैं; ऐसा लगता है कि आप आंतरिक रूप से यह अधिक कठिन बना रहे हैं।

फ़ाइल से जोड़ने के साथ एकमात्र सामान्य समस्या यह है कि यदि इसमें टेक्स्ट, एचटीएमएल, एक्सएमएल या एक छवि है, तो ब्राउज़र इसे डाउनलोड करने के बजाय इनलाइन प्रदर्शित करेगा। इसे हराने का एकमात्र तरीका 'कंटेंट-डिस्पोजिशन: अटैचमेंट' हेडर का उपयोग कर रहा है, या तो इस हेडर को सेट करने वाली स्क्रिप्ट के माध्यम से या सभी वेब डाउनलोड के लिए हेडर भेजने के लिए अपने वेब सर्वर को कॉन्फ़िगर करके। यदि आप अपने सर्वर वातावरण में से किसी एक को नहीं कर सकते हैं, तो कोई समाधान नहीं है।

+0

आपकी विस्तृत टिप्पणियों और उत्कृष्ट युक्तियों के लिए बहुत बहुत धन्यवाद। मैंने फ़ाइल को डाउनलोड करने के लिए बस एक लिंक प्रदान करने का निर्णय लिया है और यह सभी ब्राउज़रों में बहुत अच्छा काम करता है और इस जटिलता से बचाता है। –

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