Firefox è l'unico che supporta il metodo sendAsBinary?XMLHttpRequest: supporto browser per sendAsBinary?
risposta
Al momento, credo che solo FF3 + supporti questo, anche se c'è un workaround per Chrome.
Per quanto ne so, sì, solo Firefox lo supporta. Non fa parte dello W3C standard, quindi non c'è alcuna garanzia che sarà mai supportato da nessun altro browser.
I collegamenti intorno a http://code.google.com/p/chromium/issues/detail?id=35705 sono molto confusi, ma non penso che ci sia una soluzione alternativa su Chrome 8 per i dati binari POST'ing.
È possibile convertire i dati in base64 e caricarli, ma il server deve essere in grado di decodificarli.
Chrome 9 (attualmente nel canale Dev, nemmeno Beta ancora) consente di eseguire XmlHttpRequest.send (blob) in cui i byte del blob vengono inviati così come sono (non convertiti in utf-8), quindi l'XmlHttpRequest non standard .sendAsBinary() non è necessario per i caricamenti di file binari.
È necessario creare questo BLOB dalla stringa "binaria" presente in evt.target.result dopo un FileReader.readAsBinaryString() eseguito correttamente. Ciò richiede utilizzando ArrayBuffer e Uint8Array, che non sono disponibili in Chrome 8.
La soluzione per Chrome è spiegato al seguente URL:
ho avuto lo stesso errore, ma sto utilizzando anche prototype.js. Sembra ha qualche sostituzione per la funzione mappa e si lanciavano TypeError per me Object ..file data here.. has no method 'each'
così ho usato questa sostituzione invece
//fix sendAsBinary for chrome
try {
if (typeof XMLHttpRequest.prototype.sendAsBinary == 'undefined') {
XMLHttpRequest.prototype.sendAsBinary = function(text){
var data = new ArrayBuffer(text.length);
var ui8a = new Uint8Array(data, 0);
for (var i = 0; i < text.length; i++) ui8a[i] = (text.charCodeAt(i) & 0xff);
this.send(ui8a);
}
}
} catch (e) {}
- 1. Chrome e altri browser abbandoneranno il supporto per Synchronous XMLHttpRequest?
- 2. Supporto del browser per stopImmediatePropagation?
- 3. window.devicePixelRatio supporto del browser
- 4. . Supporto browser SVG
- 5. Supporto browser E4X
- 6. Supporto browser DocumentFragment
- 7. Supporto del browser Ember.js?
- 8. Supporto browser Trasparenza PNG
- 9. Supporto browser per numeri di pagina CSS
- 10. Rileva supporto browser per comunicazione inter-finestra
- 11. Rileva supporto browser per HTML Media Capture
- 12. Supporto browser modulo layout CSS3
- 13. XMLHttpRequest cambia POST per OPZIONE
- 14. Supporto Xpath nel mio browser?
- 15. .Cliccate(), il supporto del browser
- 16. Nessun progresso XMLHttpRequest 2 nel browser di serie Android
- 17. Come rilevare se il browser accetta eventi xmlhttprequest da addEventListener?
- 18. (Mobile) Supporto del browser per la condivisione di risorse incrociate?
- 19. : supporto browser text-decoration per la prima lettera
- 20. Supporto browser per CSS: first-child e: last-child
- 21. Supporto del browser per il carattere jolly askerisk (*) nei CSS?
- 22. Rileva il supporto del browser per SVG animato
- 23. C# browser headless con supporto javascript per crawler
- 24. supporto penna/stilo nei browser Web
- 25. Supporto browser Web H.265/HEVC
- 26. Supporto per grana fine Supporto per i verbi HTTP
- 27. Supporto JSON nativo del browser (window.JSON)
- 28. CORS con WebAPI per XmlHttpRequest
- 29. XMLHttpRequest per ottenere risposta HTTP dall'host remoto
- 30. Firebase sincrono XMLHttpRequest obsolete
Che cosa è esattamente la soluzione? – antimatter15
Credo che la soluzione alternativa sia definire il proprio sendAsBinary tramite prototipo in quanto tale: provare { se (XMLHttpRequest.prototype.sendAsBinary) restituisce; XMLHttpRequest.prototype.sendAsBinary = funzione (datastr) { funzione byteValue (x) { ritorno x.charCodeAt (0) & 0xff; } var ords = Array.prototype.map.call (datastr, byteValue); var ui8a = new Uint8Array (ords); this.send (ui8a.buffer); } } catch (e) {} –
Mi piace come 'Marko' ha risposto a' Polo'. – Jimmery