#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.