Я работаю над веб-приложением, которое при добавлении в HomeScreen будет действовать как автономное приложение, то есть пользовательский интерфейс браузера недоступен.
В какой-то момент мне нужно открыть файл,URL на который будет сгенерирован только при нажатии на ссылку.Вот шаблон:
<a class="mobile-target"
(click)="download($event, doc)"
[id]="doc.dokumentGuid"
[title]="doc.name"><span>{{dokumentMime(doc)}}</span></a>
Вот метод, который обрабатывает щелчок в компоненте:
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);
}
Некоторые версии iOS открывают приложение Safariи новое окно в нем.Последняя версия iOS12 на iPhone 7S (и я понятия не имею, почему iPhone 6 с ней согласен) откроет ссылку в том же автономном окне, что сделает невозможным возврат на страницу, гдебыла нажата ссылка (поскольку в автономном режиме пользовательский интерфейс отсутствует).
Почему Safari иногда игнорирует target = _blank и не открывает новое окно Safari?