У меня есть решение, которое работает сейчас. Это взлом, поэтому он может не работать в ближайшем будущем, поскольку он обходит функции безопасности, упомянутые выше Ткаем.
Я ввожу таймаут, ожидающий запроса ajax, чтобы вернуть данные, которые я хочу проверить, прежде чем запускать диалог браузера файлов.
customFileUploadButton.addEventListener('click', function(e) {
var returnValueToCheck; //Value we want to check against
//reference to vanilla JS ajax function that takes callback
ajax(function(ajaxData) {
returnValueToCheck = ajaxData;
});
setTimeout(function() {
if (returnValueToCheck !== undefined) { //dummy check for example
file.click();
} else {
console.log("Criteria not fulfilled");
}
}, 1000);//timer should be larger than AJAX timeout
});
Честно говоря, я немного не уверен, почему именно эта работа за исключением явно проходящих определенных браузеров тестов, обычно запрещающих такое поведение. Поэтому я рассматриваю это как хак.
Моим примером является vanilla JS, но создать jQuery-версию должно быть легко. См. Этот JSFiddle для полного примера.
(Это мое первое участие в создании, поэтому, пожалуйста, прокомментируйте возможные ошибки и недочеты)