Я работаю над проектом, где у нас есть вызов AJAX, который отвечает блоком, содержащим файл excel. Я хочу, чтобы код открывал файл в качестве загрузки, когда я получаю ответ. Вот обратный вызов:Firefox a.click не срабатывает без точки останова
var blob = new Blob([response.data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
var objectUrl = URL.createObjectURL(blob);
var a = document.createElement("a");
var header = response.headers("Content-Disposition");
a.download = header.substring(header.indexOf("filename=") + "filename=".length);
a.href = objectUrl;
document.body.appendChild(a);
console.debug("Clicking a tag");
a.click();
document.body.removeChild(a);
window.URL.revokeObjectURL(objectUrl);
Этот код прекрасно работает в хром, но в Firefox ничего не происходит, когда a.click() пожаров. Отчет отладки печатается, поэтому я знаю, что обратный вызов происходит. Кроме того, по какой-то причине, если я поставил точку останова на a.click()
, он отлично работает.
Может кто-нибудь объяснить, почему клик работает только в режиме отладки?
Нет кости. Я просто попробовал это без каких-либо результатов. – user2752635
@ user2752635: Возможно, я ошибаюсь, вам может понадобиться * после * щелчка. Я добавил пример с ним в обоих местах выше. Я также помню что-то в Firefox около года назад, когда тайм-аут '0' не работал, но тайм-аут' 10' не делал этого. (В этот момент я решил переосмыслить весь свой подход, так как мне было неудобно ... :-)) –
Это исправляет проблему для меня. Мне не нравится иметь 'setTimeout (fn, 0)' в моем коде (особенно вложенном), но если он работает, он работает. – user2752635