iframe

2010-12-04 22 views
7

के माध्यम से फ़ाइल डाउनलोड करने पर क्रोम त्रुटि मैं सर्वर पर JSON डेटा सबमिट कर रहा हूं। सर्वर एक पीडीएफ फ़ाइल उत्पन्न करता है और उस पीडीएफ फाइल के यूआरएल के साथ जवाब देता है। मैं फिर पीडीएफ फाइल डाउनलोड करने के लिए सर्वर से एक और अनुरोध करता हूं। डाउनलोड करने के लिए, मैं एक छिपी आईफ्रेम बना देता हूं और स्रोत को पीडीएफ यूआरएल सेट करता हूं। ध्यान दें कि मैं चाहता हूं कि उपयोगकर्ता का ब्राउज़र उसी पृष्ठ पर बने रहें और पृष्ठभूमि में डाउनलोड हो। मैं जो कर रहा हूं उसके बारे में अधिक जानकारी और जिस समाधान के साथ मैं गया था उसे this SO question में पाया जा सकता है।iframe

जब भी मैं क्रोम में इस तकनीक का उपयोग करता हूं, सब कुछ ठीक काम करता है। लेकिन क्रोम डेवलपर कंसोल को देखते हुए, मुझे त्रुटि संदेश Failed to load resource दिखाई देता है। क्या ऐसा करने का कोई तरीका है ताकि मुझे इन त्रुटियों को न मिले?

एक बहुत ही सरल और काम कर रहे example of the problem in action jsfiddle पर देखा जा सकता है। बस डाउनलोड पीडीएफ बटन पर क्लिक करें और अपने क्रोम कंसोल को देखो।

उस पृष्ठ पर कोड इस तरह दिखता है:

$(document).ready(function() { 
    var downloadFile = function(url){ 
     var iframe = $("iframe#download"); 
     if (!iframe.length) { 
      iframe = $("<iframe id='download' style='display:none;'/>"); 
      $("body").append(iframe); 
     } 
     iframe.attr("src", url); 
    }; 

    $("button").click(function() {  
     downloadFile("http://www.education.gov.yk.ca/pdf/pdf-test.pdf"); 
    }); 
}); 
+2

यदि आप "प्रदर्शन: कोई नहीं;" लेते हैं यह मैक के लिए क्रोम स्थिर पर मेरे लिए काम करता है। मुझे लगता है कि इस तथ्य के साथ कुछ करना है कि क्रोम एक अंतर्निहित पीडीएफ व्यूअर का उपयोग करके पीडीएफ खोलने की कोशिश कर रहा है। हो सकता है कि आवेदन/पीडीएफ से एप्लिकेशन/ऑक्टेट-स्ट्रीम में प्रतिक्रिया के सामग्री-प्रकार को बदलने का प्रयास करें ताकि वह इसे सामान्य फाइल के रूप में देख सके और इसे डाउनलोड कर सके? –

उत्तर

4

अन्य उत्तरदाताओं ने सामग्री-प्रकार शीर्षलेख को बदलने का सुझाव दिया है, जो कि साथ ही काम करना चाहिए, लेकिन ब्राउज़र को निर्देश देने के लिए एक विशिष्ट प्रतिक्रिया शीर्षलेख है फ़ाइल।

पीडीएफ के बजाय डाउनलोड किया जा करने के लिए ब्राउज़र में प्रदर्शित मजबूर करना चाहिए निम्नलिखित:

"सामग्री स्वभाव: लगाव; फ़ाइल नाम = [आपकी फ़ाइल का नाम]"

+0

धन्यवाद। मुझे वापस जाना होगा और जांचना होगा, लेकिन मेरा मानना ​​है कि मैं पहले से ही ऐसा कर रहा हूं। – Tauren

+0

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

+1

बस सोचा कि मैं एक गॉचा का उल्लेख करता हूं जो मुझे मिला। सुनिश्चित करें कि शीर्षलेख का 'अनुलग्नक' भाग 'फ़ाइल नाम' भाग से पहले आता है यानी इसे 'अनुलग्नक' पढ़ना चाहिए; फ़ाइल नाम = wibble.txt 'के बजाय' filename = wibble.txt; लगाव ' –

-2

document.ready के बाहर अपने समारोह के लिए कदम ...

सामान्य कार्यों हमेशा बाहर होना चाहिए ... और यह जहाँ भी बुलाया जाना चाहिए

$(document).ready(function() {  

    $("button").click(function() {  
     downloadFile("http://www.education.gov.yk.ca/pdf/pdf-test.pdf"); 
    }); 
}); 

    var downloadFile = function(url){ 
      var iframe = $("iframe#download"); 
      if (!iframe.length) { 
       iframe = $("<iframe id='download' style='display:none;'/>"); 
       $("body").append(iframe); 
      } 
      iframe.attr("src", url); 
     }; 
+0

धन्यवाद, और मेरे ऐप में मैं पहले से ही ऐसा करता हूं। मेरा उदाहरण समस्या को स्पष्ट करने के लिए बस त्वरित और गंदा था। लेकिन आपका जवाब मेरे प्रश्न को बिल्कुल संबोधित नहीं करता है। क्रोम में 'संसाधन लोड करने में विफल' त्रुटि संदेश क्यों प्राप्त हो रहा है? – Tauren

+0

तो जब मैं JSFiddler में बटन क्लिक करता हूं तो ऐसा लगता है कि पृष्ठ के सभी तत्व छोटे हो जाते हैं (मैं क्रोम 8.0.552.215 पर हूं)। इसके अलावा, क्या आप समझ सकते हैं कि दस्तावेज़ से फ़ंक्शन को क्यों हटाया जा रहा है। पहले से ही यह काम करें? संपादित करें: बटन पर क्लिक करने के बाद क्रोम के ज़ूम 100% से 34% तक सेट होने के कारण पेज संकोचन हो रहा है - अजीब। – Steven

+0

आप सही हैं, @ शम्बल। यह बहुत अजीब है। मुझे आश्चर्य है कि ज़ूम परिवर्तन क्या हो रहा है। भले ही, मैं अभी भी 'तैयार() 'से फ़ंक्शन को स्थानांतरित करने के बाद' संसाधन लोड करने में विफल 'त्रुटि देख रहा हूं। Jsfiddle पर एक अद्यतन संस्करण यहां दिया गया है: http://jsfiddle.net/94WvR/3/ मैं यह देखने में असफल रहा कि फ़ंक्शन का स्थान संभवतः कैसे मायने रख सकता है। – Tauren

0

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

2

यह मेरे सिर के शीर्ष से बाहर है - मेरा मानना ​​है कि मैंने पहले एक ही मुद्दे में भाग लिया है। जब iframe को पहले डोम में जोड़ा जाता है, तो इसमें कोई स्रोत नहीं होता है - जो क्रोम को "संसाधन लोड करने में असफल" बनाता है।

आइफ्रेम के लिए एक प्रारंभिक src जोड़ने का प्रयास करें -

iframe = $("<iframe id='download' src='about:blank' style='display:none;'/>"); 

कि यह करना चाहिए मेरा मानना ​​है कि। (यदि यह गलत है तो आप मुझे एक अरब बार घटा सकते हैं :))

+0

वैसे, मैंने आपके jsfiddle लिंक को देखने का प्रयास किया, और मुझे कंसोल में कोई त्रुटि नहीं मिली, क्या आप 10.0.648.204 का उपयोग कर रहे हैं? – ansiart

+0

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

+0

क्या आपको अभी भी त्रुटि मिल रही है? मुझे लगता है कि क्रोम के नए संस्करण खाली iframes पर कोई त्रुटि नहीं दिखाते हैं – ansiart

2

Chrome में एक अंतर्निहित PDF दर्शक। जब आप iframe के स्रोत को सेट करते हैं, तो क्रोम बस पीडीएफ फ़ाइल प्रदर्शित करने का प्रयास करता है। चूंकि यह display:none पर सेट है, इसलिए डाउनलोड रद्द हो जाता है और आपको वह संदेश मिलता है।

displaynone के अलावा किसी अन्य चीज़ पर सेट करने का प्रयास करें और position:absolute के साथ स्क्रीन से iframe को स्थिति दें।

0
var downloadFile = function(url){ 
    var iframe = $("iframe#download"); 
    if (!iframe.length) { 
     iframe = $("<iframe id='download' style='display:none;'/>"); 
     $("body").append(iframe); 
    } 
    iframe.attr("src", url); 
    iframe.on('load',function(){ 
      console.log("error") 
    }); 
}; 

यू बस इसे आज़माएं, यह काम कर रहा है, लेकिन यह इस समस्या को हल करने का सही तरीका नहीं है ...