2016-05-02 18 views
2

私が取り組んでいるアプリケーションでは、サーバー側のオブジェクトのレポートを生成する機能があります。クライアント上の新しいタブで(当面は)開きます。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エラーを回避できますか?

答えて

5

IEでは、ブロブを直接開くことはできません。 msSaveOrOpenBlobを使用する必要があります。 msSaveBlobもあります。

+1

私の悪いところは、私はmsSaveBlobを考えていました。それは存在する。 – Kyle

関連する問題