Posts
103
Comments
238
Trackbacks
4
Building a Better Busy Box - Ver 1.2 (Processing… Please Wait)

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;
    
ifthis.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;
    
ifthis.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

posted on venerdì 7 ottobre 2005 18:16 Print
News

Scopri CS2, il mio progetto universitario per l'indicizzazione e la ricerca di codice sorgente personale costruito su Lucene.Net.

Windows Developer Power Tools

Potete trovare il mio progetto BusyBoxDotNet nel libro Windows Developer Power Tools, pubblicato da O'Reilly, per il quale ho scritto l'intero capito dedicato.

Sono stato nominato dVP 2008, un riconoscimento per l'apporto fornito alla comunità del progetto db4o.