我有以下代码在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上,新选项卡已打开,但会立即关闭。知道是什么导致了这个吗?
答案 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();