diff --git a/lime/_backend/html5/HTML5HTTPRequest.hx b/lime/_backend/html5/HTML5HTTPRequest.hx
index 35159bd77..1a99afe3e 100644
--- a/lime/_backend/html5/HTML5HTTPRequest.hx
+++ b/lime/_backend/html5/HTML5HTTPRequest.hx
@@ -31,6 +31,7 @@ class HTML5HTTPRequest {
private static var originProtocol:String;
private static var requestLimit = 4;
private static var requestQueue = new List ();
+ private static var supportsImageProgress:Null;
private var binary:Bool;
private var parent:_IHTTPRequest;
@@ -425,7 +426,21 @@ class HTML5HTTPRequest {
private static function __loadImage (uri:String, promise:Promise):Void {
var image = new JSImage ();
- if(uri.indexOf("data:") == 0){
+
+ if (!__isSameOrigin (uri)) {
+
+ image.crossOrigin = "Anonymous";
+
+ }
+
+ if (supportsImageProgress == null) {
+
+ supportsImageProgress = untyped __js__ ("'onprogress' in image");
+
+ }
+
+ if (supportsImageProgress || StringTools.startsWith (uri, "data:")) {
+
image.addEventListener ("load", function (event) {
var buffer = new ImageBuffer (null, image.width, image.height);
@@ -454,47 +469,46 @@ class HTML5HTTPRequest {
}, false);
image.src = uri;
- }else{
- if (!__isSameOrigin (uri)) {
-
- image.crossOrigin = "Anonymous";
-
- }
-
- var request = new XMLHttpRequest();
-
+
+ } else {
+
+ var request = new XMLHttpRequest ();
+
request.onload = function (_) {
activeRequests--;
processQueue ();
- var img = new Image();
- img.__fromBytes( Bytes.ofData(request.response), function(img){
+ var img = new Image ();
+ img.__fromBytes (Bytes.ofData (request.response), function (img) {
promise.complete (img);
});
}
-
- request.onerror = function (e:ErrorEvent) {
+
+ request.onerror = function (event:ErrorEvent) {
- promise.error(e.message);
+ promise.error (event.message);
}
-
- request.onprogress = function(e:ProgressEvent) {
+
+ request.onprogress = function (event:ProgressEvent) {
- if (e.lengthComputable) {
+ if (event.lengthComputable) {
- promise.progress(e.loaded, e.total);
+ promise.progress (event.loaded, event.total);
}
}
- request.open("GET", uri, true);
+
+ request.open ("GET", uri, true);
request.responseType = XMLHttpRequestResponseType.ARRAYBUFFER;
- request.overrideMimeType('text/plain; charset=x-user-defined');
- request.send(null);
+ request.overrideMimeType ('text/plain; charset=x-user-defined');
+ request.send (null);
+
}
+
}