window.open к загрузке с последующим изменением window.location не загружается - PullRequest
0 голосов
/ 01 мая 2019

В JavaScript моего приложения мы запускаем window.open(location1), за которым следует window.location = location2, и кажется, что 9 раз из 10 window.open никогда не происходит.Это в отличие от того, что должно произойти, изменения местоположения не должны останавливать выполнение.Это происходит в Chrome и Safari.

Кнопка экспорта ссылается на страницу с содержимым ниже.Сначала он открывает свой собственный URL, на этот раз с action=go, чтобы вызвать фактические заголовки загрузки, установленные для файла, и т. Д. Затем он меняет расположение обратно на исходную страницу.

<script>
    window.onload = function() {
        window.open(window.location + '&action=go', '_blank');
        window.location = '{{ original_url }}';    
    };
</script>

Это сработалопока несколько месяцев назад.Теперь это работает только один из пяти или десяти раз.Я пытался отложить изменение местоположения и т. Д., Но это не имеет никакого эффекта.

1 Ответ

1 голос
/ 02 мая 2019

Это кажется странным. Вместо этого вы, вероятно, захотите создать <a>, установить все его значения, включая инструкцию «открыть на новой вкладке», добавить это в тело, как только страница будет готова, а затем щелкнуть и удалить его:

const loadSecondary = () => {
  let secondary = document.createElement(`a`);
  secondary.style.display = `none`;
  secondary.setAttribute(`target`, `_blank`);
  secondary.href = ...

  document.body.appendChild(secondary);
  secondary.click();
  document.body.removeChild(secondary);
};

document.addEventListener(`DOMContentLoaded`, loadSecondary);

Преимущество этого в том, что (а) это нормальная ссылка, поэтому вам не нужно иметь дело с параметрами window.open и блокировкой всплывающих окон, и (б) это обычная ссылка (опять =), поэтому она добавляется в просмотр истории браузера также автоматически.

...