2015-06-07 7 views
34

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

function downloadFile(filename, data) { 

    var a = document.createElement('a'); 
    a.style = "display: none"; 
    var blob = new Blob(data, {type: "application/octet-stream"}); 
    var url = window.URL.createObjectURL(blob); 
    a.href = url; 
    a.download = filename; 
    document.body.appendChild(a); 
    a.click(); 
    document.body.removeChild(a); 
    window.URL.revokeObjectURL(url);  
} 

क्या कोई मेरी मदद कर सकता है? यह फ़ायरफ़ॉक्स 38.0.5 का उपयोग करके परीक्षण किया गया था।

+8

किंडा अजीब डाउनलोड करने के लिए के लिए जो 'document.body.appendChild (ए) पर कॉल करता है; 'फ़ायरफ़ॉक्स के लिए आवश्यक है। –

+0

http://stackoverflow.com/questions/37817591/unable-to-download-pdf-blob-url-on-safari/43898188#43898188 – andreasonny83

उत्तर

57

आप शायद बहुत जल्दी संसाधन निकालने जा रहे हैं, देरी की कोशिश यह

... 
    a.click(); 
    setTimeout(function(){ 
     document.body.removeChild(a); 
     window.URL.revokeObjectURL(url); 
    }, 100); 
} 
+1

वाह - हां वास्तव में, यह अद्भुत काम करता है! धन्यवाद! – Johncl

+0

एक ऐसे वर्कर में बनाए गए ब्लॉब ऑब्जेक्ट यूआरएल के साथ एक ही समस्या थी जिसे वर्कर बंद करने के बाद पूरी तरह से निरस्त कर दिया गया था। आपके उत्तर ने मुझे सही रास्ते पर पहुंचाया, कार्यकर्ता को बंद करने से पहले एक टाइमआउट जोड़ना .. धन्यवाद! – meyertee

+3

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

1

इस समाधान बॉट क्रोम और फ़ायरफ़ॉक्स में मेरे लिए काम करता मौजूदा एंकर तत्व बाइनरी फ़ाइल

window.URL = window.URL || window.webkitURL; 

var blob = new Blob([new Uint8Array(binStream)], {type: "octet/stream"}); 

var link = document.getElementById("link"); 
link.href = window.URL.createObjectURL(blob); 
संबंधित मुद्दे