requestCrossOrigin static method
Makes a cross-origin request to the specified URL.
This API provides a subset of request which works on IE9. If IE9 cross-origin support is not required then request should be used instead.
Implementation
static Future<String> requestCrossOrigin(
String url, {
String? method,
String? sendData,
}) {
if (supportsCrossOrigin) {
return request(url, method: method, sendData: sendData).then((xhr) {
return xhr.responseText!;
});
}
var completer = new Completer<String>();
if (method == null) {
method = 'GET';
}
var xhr = JS('var', 'new XDomainRequest()');
JS('', '#.open(#, #)', xhr, method, url);
JS(
'',
'#.onload = #',
xhr,
convertDartClosureToJS((e) {
var response = JS('String', '#.responseText', xhr);
completer.complete(response as FutureOr<String>?);
}, 1),
);
JS(
'',
'#.onerror = #',
xhr,
convertDartClosureToJS((e) {
completer.completeError(e);
}, 1),
);
// IE9 RTM - XDomainRequest issued requests may abort if all event handlers
// not specified
// http://social.msdn.microsoft.com/Forums/ie/en-US/30ef3add-767c-4436-b8a9-f1ca19b4812e/ie9-rtm-xdomainrequest-issued-requests-may-abort-if-all-event-handlers-not-specified
JS('', '#.onprogress = {}', xhr);
JS('', '#.ontimeout = {}', xhr);
JS('', '#.timeout = Number.MAX_VALUE', xhr);
if (sendData != null) {
JS('', '#.send(#)', xhr, sendData);
} else {
JS('', '#.send()', xhr);
}
return completer.future;
}