2016-05-02 3 views
2

Для приложения, над которым я работаю, у нас есть функция, в которой мы создаем отчет для объекта на стороне сервера и открывая его на новой вкладке (на данный момент) на клиенте.«Отказано в доступе» при попытке открыть URL-адрес, сгенерированный для обработанного процедурами PDF в IE11

Я использую функцию URL.createObjectURL, чтобы сделать URL-адрес для Blob, который состоит из результатов вызова 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; 
    } 
})(); 

Сервер код на стороне не имеет значения для этого вопроса.

Вопрос: Почему это в моем коде контроллера, я получаю сообщение об ошибке, 0x80070005 - JavaScript runtime error: Access is denied. в IE11? Кроме того, каким образом я могу избежать ошибки Access Is Denied?

ответ

5

IE не позволит вам открывать капли напрямую. Вы должны использовать msSaveOrOpenBlob. Также есть msSaveBlob.

if (window.navigator && window.navigator.msSaveOrOpenBlob) { 
    window.navigator.msSaveOrOpenBlob(blob, fileName); 
} else { 
    var objectUrl = URL.createObjectURL(blob); 
    window.open(objectUrl); 
} 
+1

Плохо, я думал о 'msSaveBlob'. Это действительно существует. – Kyle

Смежные вопросы