Не срабатывает window.open

92
09 марта 2021, 13:40

Простая функция, которой передаётся объект blob:

output_blob(data) {
  window.open(URL.createObjectURL(data));
}

Окно не открывается в Google Chrome версии 75.0.3770.100 (Официальная сборка), (64 бит) на OS Ubuntu 18.04. Не выводится никаких ошибок! интересно ещё и то, что вот так срабатывает:

output_blob(data) {
  window.open();
}

В чём может быть проблема?

Answer 1

Всплывающее окно блокируется либо браузером, либо расширением для браузера.

1 Пример из практики.

<!-- Где-то в шаблоне компонента. -->
Экспорт файла <i>.*csv</i> по <a href="#" @click="exportToCsv">ссылке</a>.
// Где-то в поле `methods` компонента.
exportToCsv(event) {
  let csvContent = ...;
  let url = URL.createObjectURL(
    new Blob([csvContent], {
      type: 'text/csv;charset=utf-8;'
    })
  );
  event.target.setAttribute('href', url);
  event.target.setAttribute('download', '997553.csv');
}

2 Или решение "в лоб": window.location = url;.

3 Если по каким-то причинам все-таки нужно всплывающее окно:

output_blob(data) {
  let url = URL.createObjectURL(data);
  let newWindow = window.open();
  newWindow.onload = function() {
    newWindow.location = url;
  }
}
Answer 2

попробуйте сделать так

let bind=null
    output_blob(data) {
      bind = data
      url  = URL.createObjectURL(bind)
      return window.open(url);
    }

или

output_blob(data) {
  let url = URL.createObjectURL(data)
  function inject(){
      return URL.createObjectURL(url);
  }
  return window.open(inject());
}
READ ALSO
Не работает форма для регистрации

Не работает форма для регистрации

Есть форма для регистрации, но про нажатии на кнопку ничего не происходитКод формы:

81
Создание CSS3 эффекта мигающего века

Создание CSS3 эффекта мигающего века

Я пытаюсь создать экран ожидания c цифрами обратного отсчета, который показывает глаз вместе с веком, и глазное яблоко с эффектом радужной...

100
Простая смена классов JS

Простая смена классов JS

У меня есть валидация с помощью регулярки, где я проверяю совпадают ли условия с введенными даннымиСейчас показан пример где нужно ввести...

100