簡體   English   中英

為什么此代碼在 MacOS Big Sur Safari 上失敗?

[英]Why is this code failing on MacOS Big Sur Safari?

我正在嘗試使用 PDF 瀏覽器擴展來獲取 PDF 預覽,以在 MacOS Big Sur Safari 上工作。

我們有一個 .NET 框架 web api 返回文件數據。 使用以下 function 檢索文件數據。

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));
                })
            );
    }
}

我們稱之為 function 如下:

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);
    }
}

然后我們使用 object 元素中的 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 中的錯誤還是我做錯了什么? 我嘗試解析 userAgent 字符串來規避這個問題,但是 Big Sur 11.0.1 返回 10.15.6 Catalina ...

不幸的是,我遇到了同樣的問題。 但是,當使用 iframe 而不是 object 元素時,這似乎不會發生,因此我將其用作解決方法。

<iframe [src]="previewSrc"></iframe>

編輯:經過更多挖掘,我注意到問題僅在添加type="application/pdf"屬性時出現。 刪除該屬性似乎也解決了這個問題。

為什么會發生這種情況,我仍然不清楚。

<object id="preview" [data]="previewSrc">

在 Angular 存儲庫中為此創建了一個問題,但我不確定這是特定於 Angular 還是 Safari 錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM