Summary: We often need to provide a user message
informing the user that their request is “processing”. Like the hour-glass
mouse pointer lets the Windows user know the system is busy processing their
last request, I have a simple, clean, and effect solution to providing this on
web pages.
Source: http://blogs.crsw.com/mark/articles/642.aspx
Demo: http://blogs.crsw.com/mark/samples/BusyBoxDemo/Default.aspx
Source code: http://blogs.crsw.com/mark/files/BusyBox-1.2-Demo.zip
Mi è tornato utile modificare lo script di Mark Wagner per risolvere
questo problema. In altre parole, quando la Response viene
reindirizzata dal code behind, ad esempio per creare un documento di Excel, il
BusyBox non scompare, perchè l'unload della pagina aspx (dove viene
chiamata la funzione javascript che visualizza il busybox) effettivamente non
termina mai.
Per ovviarvi ho creato una nuova funzione javascript che consenta di
specificare un timeout, scaduto il quale il busybox viene automaticamente
nascosto. Non è stato un grande sforzo, dato che l'idea me l'ha data un commento
al post, dove un lettore aveva avuto l'idea di creare una funzione che
consentisse di mostrare il busybox dopo un certo tempo dalla chiamata alla
funzione, in modo che il busy box venisse visualizzato solo se veramente
necessario, e non ad ogni richiesta che partiva da quella pagina.
La funzione originale, da aggiungere allo script del busybox, è la
seguente:
// Example:
// <body onbeforeunload="busyBox.ShowAfterDelay(1000);" >
BusyBox.prototype.ShowAfterDelay = function(inDelay)
{
if( !this.Enabled )
return;
if( this.IsAnimating() || this.IsVisible() )
return;
window.setTimeout(this.VarName + ".Show();", inDelay);
}
Mentre quella da me creata è questa:
// ShowAfterDelayAndHideAfterDelay:
// This function displays the busy box to the user after inDelay milliseconds
// and hides it after outDelay milliseconds. This function centers the
// busy dialog box, makes it visible, and starts the animation. This function
// will typically be called by the body unload event.
//
// Example:
// <body onbeforeunload="busyBox.ShowAfterDelayAndHideAfterDelay(1000, 10000);" >
BusyBox.prototype.ShowAfterDelayAndHideAfterDelay = function(inDelay, outDelay)
{
if(inDelay >= outDelay)
return;
if( !this.Enabled )
return;
if( this.IsAnimating() || this.IsVisible() )
return;
window.setTimeout(this.VarName + ".Show();", inDelay);
window.setTimeout(this.VarName + ".Hide();", outDelay);
}
Mark Wagner inizialmente aveva annunciato di voler creare un controllo server
che consentisse di includere questa funzionalità, ma al momento niente è stato
fatto. Se qualcuno fosse interessato mi piacerebbe provare a sviluppare un
controllo di questo tipo... Fatemi sapere!
powered by IMHO 1.2