【问题标题】:"Access is Denied" when embedding file from blob URL in IE从 IE 中的 blob URL 嵌入文件时“访问被拒绝”
【发布时间】:2015-08-28 21:17:42
【问题描述】:

我有一个 Web 服务向客户端发送一个文件作为数组缓冲区,然后将其读入 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中却不行。

对象标签的data参数设置后,IE在控制台响应

错误:访问被拒绝。

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

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

有谁知道在 IE 中嵌入 blob(可以是多种文件类型)的解决方法或方法?我不想为了适应 IE 而不得不彻底重构 Web 服务和前端代码,但看起来情况可能就是这样。

【问题讨论】:

    标签: javascript angularjs internet-explorer pdf blob


    【解决方案1】:

    我认为答案是“不”。我们的网站会即时生成 PDF,但我们会在浏览器中嗅探返回的 PDF 可以做什么。

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

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

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

    不要让我们开始讨论 IE 上还有什么问题,因为 IE 停止为文档中的某些“p”标签序列化结束标签,所以有几个页面刚刚损坏。

    【讨论】:

    • blob api 与使用数据 uri 有很大不同。数据 URI 仅用于编码小文件 - 我认为大多数浏览器的长度限制为几 MB。
    • 大部分为 4GB,仅在 IE 中。根据上面的链接,4GB 限制从 IE 9 开始。
    猜你喜欢
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多