Angularjs - Firefox无法在新标签中打开blob网址

时间:2017-03-02 06:36:50

标签: angularjs firefox

我有以下代码在Chrome和IE中正常运行。用户单击锚标记并执行代码,然后在带有url blob的新选项卡中呈现pdf文件:http://localhost:57389/5aee262a-8bc9-4943-b67f-7b76aeef4b99

vme.loadAttachment = function (attachment) {
    taskService.getAttachmentContent(attachment.Name)
        .then(function (response) {
            var file = new Blob([response], { type: attachment.Type });
            if (window.navigator && window.navigator.msSaveOrOpenBlob) {
                window.navigator.msSaveOrOpenBlob(file);
            }
            else {
                var objectUrl = URL.createObjectURL(file);
                window.open($sce.trustAsResourceUrl(objectUrl), _blank");
            }
       })
};

但是在Firefox上,新选项卡已打开,但会立即关闭。知道是什么导致了这个吗?

3 个答案:

答案 0 :(得分:6)

这件事今天发生在我身上。我有几个不同的VM快照用于测试不同的"客户端",我有两个这样的PDF无法打开 - 浏览器短暂闪烁,PDF没有出现。

最后,它是一个广告拦截器(ABP)。简单地告诉它忽略网站域允许PDF正确显示。

答案 1 :(得分:0)

检查浏览器弹出设置。这可能是问题之一。

答案 2 :(得分:0)

我遇到了同样的问题:之前的代码工作(仍在使用chrome),不再起作用了。我认为问题与firefox禁止从脚本打开blob URL有关 - 但我无法验证它。但是,如果您尝试从控制台执行window.open(myBlobUrl),您将看到:

  

错误:访问' blob:http://localhost:8000/53dc4cba-329a-4479-b685-d0257425b318'从脚本被拒绝

解决方案/解决方法

我唯一的解决方案/解决方法是在后端服务中创建一个URL,它直接提供PDF。

服务器

将这些http标头添加到响应可以访问PDF的URL的处理程序中:

Content-Disposition: inline; filename = filename.pdf
Content-Type: application/pdf

角度视图

<a ng-href="{{ pathToPdf }}" target='_blank'>my link</a>

角度控制器

$scope.pathToPdf = MyPdfService.getPdfUrl();