Одна из опций, которую я использовал в прошлом, - запуск запроса на загрузку в скрытый iframe вместо всплывающего окна с помощью небольшого количества JavaScript:
var Utils = Utils || {};
Utils.download = function(url) {
var iframe = $("<iframe/>").hide().appendTo("body").load(function() {
iframe.remove();
}).attr("src", url);
};
Таким образом, вам не нужно беспокоиться о каких-либо видимых всплывающих окнах. Единственным недостатком является то, что если загрузка файла не удалась, пользователь не получит никаких намеков на то, что пошло не так (тогда как в вашем случае у него все еще будет всплывающее окно с неповрежденным сообщением об ошибке). Чтобы обойти эту проблему, вместо возврата файла, верните страницу, содержащую некоторый javascript, который запускает какое-то предупреждение при загрузке, чтобы сообщить пользователю об ошибке.
Также обратите внимание, что по памяти вызов iframe.remove()
при загрузке iframe не работает во всех (любых?) Браузерах, но в конце концов это не имеет никакого значения, так как в худшем случае вы ' просто заканчиваем с кучей пустых фреймов, прикрепленных к концу dom, которые не должны вызывать проблем (и вы всегда можете продолжать использовать один и тот же, а не создавать новые, если это было проблемой).