"拒绝访问"从IE中的blob URL嵌入文件时

时间:2015-06-12 18:51:52

标签: javascript angularjs internet-explorer pdf blob

我有一个Web服务,它将客户端的文件作为arraybuffer发送,然后将其读入blob对象:

$scope.contentType = response.headers["content-type"];
$scope.file = new Blob([response.data], { type: $scope.contentType });
$scope.fileUrl = URL.createObjectURL($scope.file);
$scope.content = $sce.trustAsResourceUrl($scope.fileUrl);

我使用对象标记作为容器:

<object id="documentContainer" ng-show="loaded" ng-attr-type="{{contentType}}" ng-attr-data="{{content}}" class="document-container"></object>

这适用于FF,Chrome,移动浏览器,由外来物种开发的网络浏览器,这些浏览器从未接触过人类等,但在IE中却没有。

当设置了object标签的data参数时,IE在控制台中以

响应
  

错误:访问被拒绝。

这似乎是IE中的某种安全功能,它不希望将该文件用作源,因为它驻留在客户端计算机上。即使您使用javascript创建具有数据源集的全新dom元素,它也禁止访问。

Microsoft提供了自己的blob方法,如msSaveOrOpenBlob,但我需要能够在浏览器中嵌入该文件,而不是提示用户在外部应用程序中打开该文件。

有没有人知道在IE中嵌入blob(可以是各种各样的文件类型)的变通方法或方法?我不愿意为了适应IE而大幅重构Web服务和前端代码,但看起来可能就是这种情况。

1 个答案:

答案 0 :(得分:2)

我认为答案是“不”。我们的网站即时生成PDF,但我们会嗅探浏览器以了解返回的PDF文件。

示例:http://www.cloudformatter.com/CSS2Pdf.Demos.Structures

如果你在Chrome上,你可以在这里选择“嵌入PDF”,它就像一个魅力......如果你在IE上,即使你选择“嵌入”,它也会下载文件。因为IE不能,我们只是将IE上的任何人重新路由到下载代码。

http://caniuse.com/#feat=datauri

并且不要让我们开始讨论IE上的其他问题,因为IE停止为文档中的某些“p”标记序列化结束标记,所以几个页面都破了。