Javascript Angular2 PWA/Safari can';不要在新窗口中打开链接

Javascript Angular2 PWA/Safari can';不要在新窗口中打开链接,javascript,angular,safari,mobile-safari,progressive-web-apps,Javascript,Angular,Safari,Mobile Safari,Progressive Web Apps,我正在开发一个web应用程序,当添加到主屏幕时,它将作为一个独立的应用程序,这意味着没有可用的浏览器UI 有一次我需要打开一个文件,只有在点击链接时才会生成指向该文件的URL。以下是模板: <a class="mobile-target" (click)="download($event, doc)" [id]="doc.dokumentGuid" [title]="doc.name"><span>{{dokumentMime(doc)}}</sp

我正在开发一个web应用程序,当添加到主屏幕时,它将作为一个独立的应用程序,这意味着没有可用的浏览器UI

有一次我需要打开一个文件,只有在点击链接时才会生成指向该文件的URL。以下是模板:

<a class="mobile-target"
   (click)="download($event, doc)"
   [id]="doc.dokumentGuid"
   [title]="doc.name"><span>{{dokumentMime(doc)}}</span></a>
{{dokumentMime(doc)}
以下是处理组件中单击的方法:

download($event, dokument: Dokument) {
    $event.preventDefault();

    this.downloading = true;
    dokument.isNew = false;

    if (isMobile()) {
        const anchor = this.document.getElementById(dokument.dokumentGuid);
        this.kundeService
            .getDokumentDownloadUrl(dokument.dokumentGuid)
            .pipe(
                tap(url => this.setAndClick(anchor, url)),
                finalize(() => (this.downloading = false))
            )
            .subscribe();
    } else {
        this.kundeService
            .getDokumentData(dokument.dokumentGuid)
            .pipe(
                tap(blob => saveBlobAs(blob, dokument.name)),
                finalize(() => (this.downloading = false))
            )
            .subscribe();
    }
}

setAndClick(anchor, url) {

    anchor.setAttribute('href', url);
    anchor.setAttribute('target', '_blank');

    // see: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/compatibility/dn905219(v=vs.85)
    const event =
        typeof (<any>window).Event === 'function'
            ? new MouseEvent('click', {
                  view: window,
                  bubbles: true,
                  cancelable: true
              })
            : document
                  .createEvent('MouseEvents')
                  .initMouseEvent(
                      'click',
                      true,
                      true,
                      window,
                      0,
                      0,
                      0,
                      0,
                      0,
                      false,
                      false,
                      false,
                      false,
                      0,
                      null
                  );

    anchor.dispatchEvent(event);
}
下载($event,dokument:dokument){ $event.preventDefault(); this.downloading=true; dokument.isNew=false; if(isMobile()){ const anchor=this.document.getElementById(dokument.dokumentGuid); 这是我的恶习 .getDokumentDownloadUrl(dokument.dokumentGuid) .烟斗( 点击(url=>this.setAndClick(锚定,url)), 完成(()=>(this.downloading=false)) ) .subscribe(); }否则{ 这是我的恶习 .getDokumentData(dokument.dokumentGuid) .烟斗( 点击(blob=>saveBlobAs(blob,dokument.name)), 完成(()=>(this.downloading=false)) ) .subscribe(); } } 设置并单击(锚定,url){ setAttribute('href',url); setAttribute('target','u blank'); //见:https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/compatibility/dn905219(v=vs.85) 常数事件= typeof(窗口)。事件==='函数' ?新建MouseeEvent('单击'{ 视图:窗口, 泡泡:是的, 可取消:正确 }) :文件 .createEvent('MouseEvents') .initMouseEvent( “点击”, 是的, 是的, 窗口, 0, 0, 0, 0, 0, 假,, 假,, 假,, 假,, 0, 无效的 ); 主播、调度事件(事件); } 某些版本的iOS确实会打开Safari应用程序并在其中打开一个新窗口。iphone7s上最新的iOS12(我不知道为什么iphone6可以使用它)将在同一个独立窗口中打开链接,因此无法返回到单击链接的页面(因为独立模式下没有用户界面)


为什么Safari有时会忽略target=\u blank,而不会打开新的Safari窗口?

我无法解释为什么iPhone6和iPhone7在浏览器行为方面存在差异。但在我的测试中清楚地发现,在独立模式下,指向同一主机的所有链接也在同一窗口中打开。不管链接是用javascript还是硬编码链接生成的。帮助我的是为下载引入了一个子域(“download.yourDomain….”)。 重要的是下载链接的范围。 在PWA中,html标题中的base href定义范围

有关主题范围,请参见此处

据我所知,苹果忽略了清单和范围