2015-06-14 4 views
11

पुराने उपकरणों पर सैमसंग ने डिफ़ॉल्ट ब्राउज़र का समर्थन नहीं करेंगेकैसे एक ब्राउज़र कि XHR2 अपलोड प्रगति

xhr.upload.onprogress 

घटना सहित कुछ एंड्रॉयड ब्राउज़रों का समर्थन नहीं करेंगे पता लगाने के लिए। इसलिए हम उन ब्राउज़रों पर रीयलटाइम अपलोड प्रगति नहीं दिखा सकते हैं।

मैं उन ब्राउज़रों का पता कैसे लगा सकता हूं? तो मैं प्रगति दिखाने के लिए अपना सेटअप बदल सकता हूं।

+1

आप ब्राउज़रों हेडर पढ़ सकते हैं। हालांकि व्यक्तिगत रूप से मुझे लगता है कि यह बेहतर होगा 'अगर (xof.upload.onprogress ===' अपरिभाषित 'टाइप करें' (या समान)। इस तरह आप हर ब्राउज़र के खिलाफ जांच से बचें। –

+0

@EricMartinez स्तर 1 और स्तर 2 ब्राउज़र दोनों पर "ऑब्जेक्ट" प्राप्त कर रहा है। – Vishnu

+0

क्षमा करें, स्तर 1 और स्तर 2 ब्राउज़र दोनों पर "शून्य" प्राप्त करना। – Vishnu

उत्तर

2

सीधे शब्दों में:

var xhr = new XMLHttpRequest(); 
if (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload)) // attach event... 

तो अगर आप एक समारोह चाहते हैं:

function supportAjaxUploadProgressEvents() { 
    var xhr = new XMLHttpRequest(); 
    return !! (xhr && ('upload' in xhr) && ('onprogress' in xhr.upload)); 
} 
+0

कृपया अपने कोड का परीक्षण करें और यदि संभव हो तो पूर्ण कोड पोस्ट करें। – Vishnu

+0

मेरा कोड पूरी तरह से काम करता है;)) – fred727

+0

आपका कोड पूरी तरह से काम करता है! फ़ंक्शन समर्थन AJAXUploadProgressEvents() { var xhr = new XMLHttpRequest(); वापसी !! (xhr && (xhr में 'अपलोड करें) && (xhr.upload में' प्रगति ')); } यदि (! SupportAjaxUploadProgressEvents()) { अलर्ट ("मैं कभी भी xhr2 का समर्थन नहीं करता"); } अन्य { \t अलर्ट ("मैं xhr2 का समर्थन करता हूं"); } – Vishnu

2

एचएम। एक बहुत पुराने फ़ायरफ़ॉक्स का परीक्षण किया। 3.5.2।

पहला संस्करण जिसमें (new XMLHttpRequest).upload संपत्ति है।

वर्तमान संस्करण क्रोम:

 
send(1); //progress 1 of 1 
send(40000000_chars); // 1,2 or more progress events. 

फ़ायरफ़ॉक्स 3.5.2:

 
send(1); //no progress events. 
send(40000000_chars); // some progress events. 

तो अगर ब्राउज़र भेज ing समय बड़ा नहीं है, पुराने ब्राउज़र पर कोई pregress घटनाओं है।

लेकिन load.loaded == .total के साथ ईवेंट सामान्य रूप से निकाल दिया जाता है।


वर्तमान निष्कर्ष: पुराने ब्राउज़र के लिए डेटा बहुत तेज़ भेज दिया गया था।

+0

हाँ बहुत छोटी फाइलों के लिए कोई प्रगति घटना निष्पादित नहीं होगी। लेकिन एक बड़ी फाइल के लिए उदाहरण के लिए: 512 के कनेक्शन पर 20 एमबी फ़ाइल अपलोड प्रक्रिया को पूरा करने में कुछ मिनट लगेंगे, फिर भी स्तर 1 ब्राउज़र पर शून्य प्रगति घटनाएं होंगी। – Vishnu

+0

@ विष्णु आप स्तर 1 (एक-पंक्ति स्क्रिप्ट) में भाग सकते हैं: 'अलर्ट ("अपलोड:" + (एक्सएमएलएचटीपीआरक्वेट.प्रोटोटाइप में अपलोड करें) + "एक्सएचआरटी:" + (एक्सएमएलएचटीपीआरक्वेटइवेंट लक्ष्य? सत्य: झूठा) + "पीई: "+ (प्रोग्रेसइवेंट? सत्य: झूठा))' – befzz

+0

स्तर 2 पर सही हो गया है, लेकिन लेवल अलर्ट फ़ंक्शन पर निष्पादित नहीं किया गया है या कुछ त्रुटि फेंक दी गई है, यह नहीं पता कि क्या हो रहा है। हम उन ब्राउज़रों को कैसे डिबग कर सकते हैं? – Vishnu

0

नीचे एफएफ 3.5.2 में परीक्षण किया गया था false वापस जाने के लिए, लेकिन नवीनतम क्रोम/एफएफ/IE11 true

के लिए अपवाद स्थापित किया जा रहा करने के बाद onpgress को पढ़ने के लिए कोशिश कर रहा पर फेंक दिया है।

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

function isSupported() { 
     var xhr = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); 
     try { 
      xhr.upload.onprogress = isSupported; 
      var x = xhr.upload.onprogress; 
      return true; 
     } catch(e) { 
      return false; 
     } 
    } 
संबंधित मुद्दे