我正在加载PDF如下(我使用Angular 2,但我不确定这是否重要......):
//Inside a service class
downloadPdf = (id): Observable<Blob> => {
let headers = new Headers();
headers.append("Accept", "application/pdf");
return this.AuthHttp.get(this.pdfURL + id, {
headers: headers,
responseType: ResponseContentType.Blob
}).map(res => new Blob([res.blob()], {type: "application/pdf"}));
}
//Inside a click handler
this.pdfService.downloadPdf(this.id).subscribe((data: Blob) => {
let fileURL = window.URL.createObjectURL(data);
window.open(fileURL);
});
此代码在Firefox中运行良好。在Chrome中,新标签会暂时闪烁并关闭。当我调试并手动将冲浪放到对象URL时,Chrome可以很好地打开它。
我在这里做错了什么?
亲切的问候,
Ewout。
答案 0 :(得分:15)
广告拦截器阻止了新标签的打开。
答案 1 :(得分:2)
它无法正常工作,浏览器会阻止新的弹出窗口,因为它是从回调创建的,而不是trusted event,要使其工作,必须直接从点击处理程序调用,或者你必须在浏览器中禁用bloking弹出窗口。
如果ajax调用在不到一秒的时间内返回,Chrome将只允许此工作正常工作。 More there