Следующий код прекрасно работает:Сброс курсор ожидания в браузере с Content-Disposition: вложение
<script type="text/javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
function InitializeRequest(sender, args) {
document.body.style.cursor = 'progress';
}
function EndRequest(sender, args) {
document.body.style.cursor = 'default';
}
</script>
Когда ответ возвращает вложение, хотя (в формате PDF от управления ReportViewer, например):
Response.AddHeader("Content-Disposition", "attachment; filename=some.pdf")
EndRequest() никогда не срабатывает, и курсор «прогресс» не сбрасывается. Вызов Javascript, например.
ScriptManager.RegisterStartupScript(this, this.GetType(), "close",
"parent.EndRequest(...);", true);
будет делать трюк, но это невозможно из-за расположения контента. Можете ли вы придумать способ сделать это правильно - показать курсор ожидания во время рендеринга PDF и вернуться к нормальному курсору при отображении PDF? Я предполагаю здесь контекст C#, но проблема не связана с языком или платформой.
pageLoaded также не запускается, и это имеет смысл в некотором смысле, потому что ответ действительно не возвращает его в контекст страницы браузера. Ничего не загружается, что заменяет текущую страницу. – cdonner
См. Измененный ответ. Включает более подробную информацию. –
Идея iframe, похоже, работает. Огромное спасибо. – cdonner