2015-06-12 187 views
8

嵌入从BLOB URL文件时,我有一个是在客户端发送一个文件作为arraybuffer然后将其读入一个blob对象的网络服务:“访问被拒绝”的IE

$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,铬,移动浏览器的伟大工程,网络浏览器受到外来物种谁从未有过的人性,等接触,但不是在IE开发。

当对象标签的数据参数设置,IE在控制台响应与

Error: Access is denied.

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

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

有谁知道一种解决方法或方法来嵌入blob,它可以是多种文件类型,在IE中?我不愿意为了容纳IE而急剧重构Web服务和前端代码,但看起来可能是这种情况。

回答

2

我认为答案是“否”。我们的网站即时生成PDF,但我们嗅探浏览器可以使用返回的PDF完成什么。

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

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

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

不要让我们开始还有什么是错误的IE浏览器,几页的刚分手,因为IE停止序列化的结束标记文档中的一些“P”标签。

+0

虽然blob api与使用数据uris相当不同。数据URI实际上仅用于编码小文件 - 我认为大多数浏览器的长度都有几MB的限制。 – mrturburdaugh

+0

4GB的大部分,只在IE浏览器。根据上面的链接,4GB限制从IE 9开始。 –