Файловый браузер не открывается после вызова AJAX в Firefox

#javascript #reactjs #ajax #firefox

#javascript #reactjs #ajax #firefox

Вопрос:

Программный щелчок по файловому вводу после успешного вызова AJAX не открывает файловый браузер в Firefox, но он отлично работает в Chrome. У меня эта проблема на 82.0.3 (64-разрядная версия), Mozilla Firefox для Ubuntu canonical — 1.0 и 83.0 (64-разрядная версия) Mozilla Firefox для Windows — в настоящее время последняя версия. Я не уверен, делаю ли я что-то не так здесь или это ошибка с Firefox. Пожалуйста, помогите мне.

Вот примеры кода:

ReactJS: https://codesandbox.io/s/gifted-napier-32n1o?file=/src/UploadOption/UploadOption.js

Javascript: https://codesandbox.io/s/condescending-sea-yv67c?file=/src/index.js

Ответ №1:

Это похоже на проблему блокировки всплывающих окон Firefox. Если вы измените dom.disable_open_during_load на false in about:config , он начнет работать.

Таким образом, Firefox, похоже, считает, что вызов async click () не является частью взаимодействия с пользователем и, таким образом, блокирует всплывающее окно.

Я подал https://bugzilla.mozilla.org/show_bug.cgi?id=1678389 на это я и отправил патч.

Что касается обходных путей, состояние блокировки всплывающих окон сохраняется во время тайм-аутов, поэтому что-то вроде этого должно работать:

   var ready = false;
  xhttp.onreadystatechange = function () {
    if (this.readyState === 4 amp;amp; this.status === 200) {
      ready = true;
    }
  };

  setTimeout(function tryReady() {
    // Does not open file explorer in mozilla firefox,
    // but the function is triggered!
    if (ready) {
      openExplorer();
    } else {
      setTimeout(tryReady, 500);
    }
  }, 500);
 

Комментарии:

1. ДА. Установка dom.disable_open_during_load в значение false открывает файловый браузер. Спасибо за сообщение об ошибке в этом. Я буду следить за этим. Но сейчас мне нужно найти обходной путь для моего приложения.

2. Спасибо за добавление обходного пути. Но это непоследовательно. Это не работает, если есть небольшая задержка (~ 1 секунда) в ответе AJAX.