Azt hittem, a böngészők közötti támogatás napjai a múlté, mivel a különféle könyvtárak elszigetelték a webböngészők bizonyos árnyalatait és az állítólagos szabványosítást, de...
Megpróbálok végrehajtani egy $http get kérést angularjs (v1.2.27) használatával, így:
$http({
url: vm.hostName + '/pdf/' + id,
method : 'GET',
responseType : 'arraybuffer',
cache : false})
.success(function (response) {
var file = new Blob([response], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
console.log(fileURL);
console.log(response.data);
window.open(fileURL);
});
ami úszva működik Chrome-on, FF-en és Safari-n (eddig Mac és Win 7, 8), de IE10+-on nem, ezt kapom:
SEC7118: XMLHttpRequest for https://[api.domain.com]/pdf/55abc12345613a szükséges Cross Origin Resource Sharing (CORS). Hiba: A hozzáférés megtagadva. az Anonymous függvényben (https://[domain.com]/site/scripts/scripts.js:289:6) az Anonymous függvényben (https://[domain.com]/public/assets/js/angular/angular.js:7736:11) a wrappedCallback webhelyen (https://[domain.com]/public/assets/js/angular/angular.js:11106:15) a wrappedCallback webhelyen (https://[domain.com]/public/assets/js/angular/angular.js:11106:15) az Anonymous funkciónál (https://[domain.com]/public/assets/js/angular/angular.js:11192:11) itt: Scope.prototype.$eval (https://[domain.com]/public/assets/js/angular/angular.js:12181:9) a Scope.prototype.$digest (https://[domain.com]/public)webhelyen/assets/js/angular/angular.js:12010:15) a Scope.prototype.$apply webhelyen (https://[domain.com]/public/assets/js/angular/angular.js:12285:13) és kész (https://[domain.com]/public/assets/js/angular/angular.js:7994:34) itt completeRequest (https://[domain.com]/public/assets/js/angular/angular.js:8196
Az api-kiszolgáló által visszaadott válaszfejlécek:
Key Value
Response HTTP/1.1 200 OK
Server nginx/1.8.0
Date Tue, 25 Aug 2015 13:40:45 GMT
Content-Type application/pdf
Content-Length 86057
Connection keep-alive
Access-Control-Allow-Methods GET, PUT, POST, OPTIONS
Access-Control-Allow-Headers Origin, Content-Type, Accept
Access-Control-Allow-Origin *
Content-Transfer-Encoding binary
és ha megnézem a válasz törzsét (a fejlesztői eszközökben) azt az üzenetet kapom, hogy nem lehet renderelni (nem indokolatlanul, mert pdf), de van egy link a tartalom mentéséhez, amely mentéskor és megnyitásakor a helyes pdf.
Úgy tűnik, hogy a hálózati válasz azt mutatja, hogy a tartalom a tartalom hosszának megfelelően letöltődik.
Megnéztem számos COR-ral kapcsolatos hozzászólást, de hiába. A legközelebbi SEC7118: XMLHttpRequest. io/1/?t=1370206038749 szükséges Cross Origin Resource Sharing (CORS) nem segít. A Microsoft blogja http://blogs.msdn.com/b/ie/archive/2012/02/09/cors-for-xhr-in-ie10.aspx sem ad több támpontot (szerintem lehet, hogy valami köze van a "tömbpufferhez" és a bináris adatokhoz, de most zsákutcában vagyok, és további inspirációt keresek.
Valaki ajánl még valamit? ps. Én irányítom a kiszolgáló API-t, és a vert.x (v2.5) szolgáltatása Java REST szolgáltatásként működik.
Kösz