Задать вопрос
@hiperteksto
Frontend Developer

Проблема с кодировкой Blob в Safari?

Имеется такой первоначальный вариант кода, для скачивания текстового файла (text/plain) в ОС (кусок кода вынут из angular-компонента\typescript):

...
getTextCompanyInfo(): string {
  let copyText = '';
  
  this.clientInfo.forEach((field: IInfo) => {
    const description = field.description
      ? `${field.description}: `
      : '';
      copyText += `${description}${field.value}\n`;
  });
  return copyText;
}

download(): void {
  StatusTrackerModalComponent.createDownloadLink(
    this.getTextCompanyInfo()
  )
}

static createDownloadLink(
  fileBody: string,
  fileName: string = 'Реквизиты.txt'
  ): void {
    if (window.navigator && window.navigator.msSaveOrOpenBlob) { // если браузер IE11
      window.navigator.msSaveOrOpenBlob(new Blob([fileBody]), fileName);
    } else { // если evergreen браузеры
      const link = window.document.createElement('a');
      link.href = window.URL.createObjectURL(
        new Blob([fileBody], { type: 'text/plain;charset=utf-8' })
      );
      link.download = fileName;
      link.click();
    }
}
...


Потом код был слегка видоизменен на такой вариант (использование плагина для кросс-браузерности):

import { saveAs } from 'file-saver';
...
getTextCompanyInfo(): string {
  let copyText = '';
  this.clientInfo.forEach((field: IInfo) => {
    const description = field.description
      ? `${field.description}: `
      : '';
    copyText += `${description}${field.value}\n`;
  });
  return copyText;
}

copy(): void {
  const copiedText = this.getTextCompanyInfo();
  copy(copiedText);
}

download(): void {
  const type = 'text/plain;charset=utf-8';
  const copiedText = this.getTextCompanyInfo();
  const blob = new Blob([copiedText], { type });
  saveAs(blob, this.fileName);
}
...


В обоих случаях результат одинаков - в Web или Android(Chrome) - текстовый файл скачивается в ОС - Desktop или Android.
В iOS\Safari(v.12.4.1) - файл не скачивается, а открывается в таком окне (я даже не могу точно сказать, что это за окно такое, ибо не яблочник совсем):
609aa80928f33631871273.jpeg
609aa8179970e081400313.jpeg

Подскажите - как понять, в чем проблема заключается вообще и как ее решить?
  • Вопрос задан
  • 291 просмотр
Подписаться 1 Средний 8 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы