私が取り組んでいるアプリケーションでは、サーバー側のオブジェクトのレポートを生成する機能があります。クライアント上の新しいタブで(当面は)開きます。IE11で手順的に生成されたPDF用に生成されたURLを開こうとすると「アクセスが拒否されました」
私はURL.createObjectURL
関数を使用して、Blob
のURLを作成しています。これはAJAX呼び出しの結果で構成されています。しかし、$window.open(generatedFileUrl)
呼び出しが行われるたびに、私はJavaScriptエラーを受け取ります。
コントローラー:
(function() {
angular.module('app').controller('someCtrl', [
'$window', 'someSvc', controller
]);
function controller($window, someSvc) {
var vm = this;
vm.thing = {}; // How we get the object is unimportant for this question.
vm.printThing = printThing;
function printThing() {
someSvc.printThing(vm.thing.id, vm.someFlag)
.then(function(result) {
var file = new Blob([result], {type: 'application/pdf'});
var fileURL = URL.createObjectURL(file);
$window.open(fileURL);
});
}
}
)();
サービス:
(function() {
angular.module('app').factory('someSvc', [
'$http', someSvc
]);
function someSvc($http) {
var service = {
printThing: function(thingId, someFlag) {
var args = {
'thingId': thingId,
'someFlag': someFlag
};
return $http.get('/Reports/SomeReport', { 'params': args });
}
};
return service;
}
})();
サーバー側のコードは、この質問に重要ではありません。
質問:私のコントローラコードでは、なぜIE11にエラーメッセージ0x80070005 - JavaScript runtime error: Access is denied.
が表示されますか?また、どのような方法でAccess Is Deniedエラーを回避できますか?
私の悪いところは、私はmsSaveBlobを考えていました。それは存在する。 – Kyle