在新的Chrome标签页中打开PDF Blob(Angular 2)

时间:2017-03-15 13:24:57

标签: google-chrome angular pdf

我正在加载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。

2 个答案:

答案 0 :(得分:15)

广告拦截器阻止了新标签的打开。

答案 1 :(得分:2)

它无法正常工作,浏览器会阻止新的弹出窗口,因为它是从回调创建的,而不是trusted event,要使其工作,必须直接从点击处理程序调用,或者你必须在浏览器中禁用bloking弹出窗口。

如果ajax调用在不到一秒的时间内返回,Chrome将只允许此工作正常工作。 More there