在IE 11中显示二进制文件(pdf)

13
我正在尝试使用此帖子中建议的方法AngularJS:在angular应用程序中显示二进制文件(.pdf)来显示二进制文件。这在Chrome和Firefox中运行得很好,但是IE 11给了我“错误:拒绝访问”的消息。 有人知道是否与Blob对象有关,并可以指导我正确的方向吗? 这是我的js代码:
$http.get(baseUrl + apiUrl, { responseType: 'arraybuffer' })
          .success(function (response) {                  
             var file = new Blob([response], { type: 'application/pdf' });
             var fileURL = URL.createObjectURL(file);
             $scope.pdfContent = $sce.trustAsResourceUrl(fileURL);
           })
           .error(function () {                        
           });

还有我的HTML:

<div ng-controller="PDFController" class="modal fade" id="pdfModal" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-lg">
    <div class="modal-content" onloadstart="">
        <object data="{{pdfContent}}"  type="application/pdf" style="width:100%; height:1000px" />
    </div>
</div>


解决方法:最终我使用了FileSaver.js,但如果有人能告诉我为什么上述提到的技术在IE 11中无法工作,我仍然会很感激。 - jymuk
1
我也遇到了这个问题,你最终是否成功解决了,而不使用FileSaver.js呢? - Madhatter5501
不好意思,我没有。 - jymuk
我知道现在有点晚,但是我遇到了同样的问题。你能提供一些关于如何从blob中显示pdf文件的信息吗? - Rana_S
有关更多详细信息和React JS的参考实现,请参见https://dev59.com/9pvga4cB1Zd3GeqP7tKI#41215607 - roray
1个回答

8

IE 11会阻止blob的显示,您需要使用以下方式:

                    var byteArray = new Uint8Array(someByteArray);
                var blob = new Blob([byteArray], { type: 'application/pdf' });
                if (window.navigator && window.navigator.msSaveOrOpenBlob) {
                    window.navigator.msSaveOrOpenBlob(blob);
                }
                else {
                    var objectUrl = URL.createObjectURL(blob);
                    window.open(objectUrl);
                }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接