Javascript 为什么MacOS Big Sur Safari上的代码会失败?

Javascript 为什么MacOS Big Sur Safari上的代码会失败?,javascript,angular,safari,macos-big-sur,Javascript,Angular,Safari,Macos Big Sur,我正在尝试使用PDF浏览器扩展获取PDF预览,以便在MacOS Big Sur Safari上工作 我们有一个返回文件数据的.NETFramework web api。使用以下函数检索文件数据 export class AttachmentService { constructor( private readonly api: ApiClient ) { } public getAttachmentContentObjectUrl(identifier:

我正在尝试使用PDF浏览器扩展获取PDF预览,以便在MacOS Big Sur Safari上工作

我们有一个返回文件数据的.NETFramework web api。使用以下函数检索文件数据

export class AttachmentService {
    constructor(
        private readonly api: ApiClient
    ) { }

    public getAttachmentContentObjectUrl(identifier: string): Observable<string> {
        return this.api.getFileData(identifier, null)
            .pipe(
                switchMap((file) => {
                    return of(window.URL.createObjectURL(file.data));
                })
            );
    }
}
导出类附件服务{
建造师(
私有只读api:ApiClient
) { }
public getAttachmentContentObjectUrl(标识符:字符串):可观察{
返回此.api.getFileData(标识符,null)
.烟斗(
开关映射((文件)=>{
返回(window.URL.createObjectURL(file.data));
})
);
}
}
我们将此函数称为以下函数:

export class PdfPreviewComponent implements OnInit {
    constructor(
        private readonly attachmentService: AttachmentService,
        private readonly domSanitizer: DomSanitizer
    ) {
    }

    public ngOnInit() {
        this.setPreviewPdfSrc(<some arbitrary id>);
    }

    private setPreviewPdfSrc(identifier: string) {
        let observable = this.attachmentService.getAttachmentContentObjectUrl(identifier);

        observable
            .subscribe(
                url => this.previewSrc = this.domSanitizer.bypassSecurityTrustResourceUrl(url),
                () => this.previewSrc = null);
    }
}
导出类PdfPreviewComponent实现OnInit{
建造师(
私有只读attachmentService:attachmentService,
私有只读Domsanizer:Domsanizer
) {
}
公共ngOnInit(){
此文件为.setPreviewPdfSrc();
}
私有setPreviewPdfSrc(标识符:字符串){
让observable=this.attachmentService.getAttachmentContentObjectUrl(标识符);
可观察
.订阅(
url=>this.previewSrc=this.domsanizer.bypassSecurityTrustResourceUrl(url),
()=>this.previewSrc=null);
}
}
然后,我们在对象元素中使用previewSrc变量来加载浏览器PDF扩展

<object id="preview" type="application/pdf" [data]="previewSrc">

但是,在MacOS Big Sur Safari 14上执行此操作时,此代码会失败并挂起浏览器

在MacOS Big Sur更新之前,一切都运行良好。在Big Sur 11.0、11.0.1和11.1上测试。都失败了。当在同一个Big Sur版本的Chrome或Safari中运行它时,它可以正常工作。在其他操作系统/浏览器上没有问题


这是MacOS Big Sur的一个bug还是我做错了什么?我试图解析userAgent字符串以避免此问题,但Big Sur 11.0.1返回10.15.6 Catalina…

不幸的是,我遇到了同样的问题。 但是,当使用iframe而不是object元素时,似乎不会发生这种情况,所以我将其用作解决方法


编辑: 在进一步挖掘之后,我注意到只有在添加
type=“application/pdf”
属性时才会出现问题。删除该属性似乎也解决了这个问题

为什么会这样,我还不清楚


我已经为此创建了,但我不确定这是特定于角度还是Safari bug。

删除
type=“application/pdf”
为我修复了它。谢谢