Да, есть, но это довольно сложно. Единственный способ, который я нашел, - это использовать iframe на клиенте и response.writeing на сервере для отправки блоков javascript обратно клиенту, который вызывает javascript в родительском окне для обработки сообщений о состоянии.
Вот пример кода. Могут быть проблемы с этим, я вырезаю это из намного большего приложения.
HTML:
<button id="doStuff">
<div id="status"></div>
<div id="iframeHolder"></div>
JavaScript:
//This one will be called from the HTML the javascript is streaming back
function updateStatus(message) {
$('#status').html(message);
}
$('#doStuff').click(function(event) {
event.preventDefault();
var url="your.page.html";
$('#iframeHolder').html('<iframe src="' + url + '"></iframe>');
}
на стороне сервера (это vb asp.net, но вы должны быть в состоянии сделать это на своем языке):
dim message as string = "hello world"
dim script = String.Format("<script type='text/javascript'>parent.updateStatus('{0}');</script>",message)
Response.Write(script)
Response.Flush()
Некоторые наблюдения
- Querystring будет вашим другом здесь. Я не уверен, что вы можете программно отправить обратно в iframe
- Скорее всего, вам придется добавить немного мусора, очищающего кеш, в строку запроса, иначе браузер, скорее всего, кеширует содержимое. Это будет очень очень быстро, но неправильно: -)
- Возможно, вам придется отправить «какой-то» html, прежде чем браузер начнет обработку содержимого iframe. Я обнаружил, что отправка HTML-комментария о 1K мусора помогает
- Чтобы избежать проблем с обновлением в FF и проблем с «постоянной загрузкой» в chrome и safari, установите для sfc iframe значение about: blank после завершения (
$('#iframeHolder iframe').attr('src','about:blank')
)
- индикатор выполнения jQuery UI выглядит довольно шикарно для отображения процента обработки
Надеюсь, это поможет. Я порвал с этим пару месяцев назад: -)