wicket-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bruce Lombardi" <brlom...@gmail.com>
Subject RE: Ajax timer not counting when tab doesn't have focus?
Date Fri, 16 May 2014 13:57:37 GMT
First, thank you  for your continuing interest. This is the best support group experience 
I've ever had. I hope the message come in the right sequence. Lke Ernesto and other A saw
the sequencing problem cause by the apache server problem.

I ran the test that Martin suggestion with  6.16.0-SNAPSHOTand got the same behavior, which
is what Ernesto and I suspected would happen.

I'm sorry, but I don't know a lot about JavaScript so I'm having with certain things.  I read
this article in stackoverflow:

https://stackoverflow.com/questions/6032429/chrome-timeouts-interval-suspended-in-background-tabs

Which lead to this:

http://stackoverflow.com/questions/5927284/how-can-i-make-setinterval-also-work-when-a-tab-is-inactive-in-chrome


Which contained an example of a script that doesn’t work correctly (if you go to it, you
will see that  it walks the word "test"  across the screen. If you go to another  tab and
come back "test" hasn’t moved)

http://jsfiddle.net/7f6DX/3/


and this example that works (does the same thing but you can see that "test"  moves even when
you go to another  tab - but don't go away too long it will reach the end and disappear).

http://jsfiddle.net/7f6DX/31/

Do you think the last (working) script  could be adapted  for our timeout?

Regards,
Bruce



-----Original Message-----
From: Ernesto Reinaldo Barreiro [mailto:reiern70@gmail.com] 
Sent: Tuesday, May 13, 2014 1:59 AM
To: users@wicket.apache.org
Subject: Re: Ajax timer not counting when tab doesn't have focus?

Martin,

Thanks for pointing out this. The exact JavaScript enabling this feature can be found here

https://github.com/reiern70/antilia-bits/blob/master/client-sign-out-parent/client-sign-out/src/main/java/com/antilia/signout/InactivitySignOutPanel.js

Maybe there is a memory leak in here as well... but I do not see the relation with WICKET-5570
as I do not use any of the AJAX timer behavior, see

https://github.com/reiern70/antilia-bits/blob/master/client-sign-out-parent/client-sign-out/src/main/java/com/antilia/signout/InactivitySignOutPanel.java

As Bruce describes the problem it sounds like if by switching to other tab browser give less
"priority" to the execution of JavaScript in inactive tabs.



On Mon, May 12, 2014 at 9:28 PM, Martin Grigorov <mgrigorov@apache.org>wrote:

> It could be that https://issues.apache.org/jira/browse/WICKET-5570 is 
> the issue.
> Please try with 6.16.0-SNAPSHOT if you can.
>
> Martin Grigorov
> Wicket Training and Consulting
>
>
> On Mon, May 12, 2014 at 8:02 PM, Bruce Lombardi <brlombar@gmail.com>
> wrote:
>
> > Thanks Ernesto.
> >
> > Yes, I do mean another browser tab. I have some new information. The
> timer
> > seems to slow way down, but not stop counting down when the user 
> > switches focus to another tab, either opening a new tab, or just 
> > clicking on
> another
> > tab. This is happening in both Chrome and Firefox.
> >
> > I thought that my code was never timing out, but further 
> > experimentation with a shorter timeout period shows that it is doing 
> > the same thing as
> the
> > demo. That is, timing out in about 10 second when you stay on the 
> > tab,
> but
> > taking 3 minutes or longer to timeout when if you change focus to a 
> > different tab.
> >
> > I would appreciate it if you could look at your demo and see the 
> > behavior and then see if you have any ideas.
> >
> > As for my code, I really feel they difference with your code are 
> > insignificant especially now that I know the behavior is the same.
> >
> > See below for the differences.
> >
> > Thanks again,
> >
> > Bruce
> >
> >
> > Code.
> >
> > I have your InactivitySignOutPanel.java, InactivitySignOutPanel.html 
> > and InactivitySignOutPanel.js from the GitHub site with one slight
> modification
> > in InactivitySignOutPanel.java (see below).
> >
> >  I setup my panel in  a base class that serves as a superclass for 
> > all
> the
> > Web pages in the application (extends WebPage)  I have a method that 
> > is called to setup the timeout. Here is the method.
> >
> >         public void setupTimeout() {
> >
> >                 // Change the following value to change the session 
> > timeout.
> >                 int numberOfMinutesUntilTimeout = 15;
> >
> >                 int secondsPerMinute = 60;
> >                 int secondsToTimeout =numberOfMinutesUntilTimeout * 
> > secondsPerMinute;
> >
> >                 add(new InactivitySignOutPanel("timeout",
> > Duration.seconds(secondsToTimeout)) {
> >
> >                 private static final long serialVersionUID = 1L;
> >
> >                         protected String getOnTimeChangedFunction() {
> >                 return 
> > "function(timeRemaining){if(!window.countDown) { window.countDown = 
> > $('#countDown'); }  $(window.countDown).html(timeRemaining);}";
> >             }
> >         });
> >
> >         add( new AjaxLink<Void>("link") {
> >
> >                         private static final long serialVersionUID = 
> > 1L;
> >
> >                         @Override
> >             public void onClick(AjaxRequestTarget target) {
> >                 // do nothing
> >             }
> >         });
> >         }
> >
> > Here is the core code in InactivitySignOutPanel I have just modified 
> > the respond method to call
> >
> >  
> > ((WebDocsSession)WebSession.get()).processLogoutorSessionExpiration(
> > );
> >
> >
> setResponsePage(WebApplication.get().getApplicationSettings().getPageE
> xpiredErrorPage());
> >
> > so that the application does the right thing. Note: a break point 
> > shows that this method is never call when the user is on another tab.
> >
> >
> >   public InactivitySignOutPanel(String id, Duration duration) {
> >         this(id, Model.of(duration));
> >     }
> >
> >     public InactivitySignOutPanel(String id, IModel<Duration> model) {
> >         super(id, model);
> >         setRenderBodyOnly(true);
> >         add(ajaxBehavior = new AbstractDefaultAjaxBehavior() {
> >
> >                         private static final long serialVersionUID = 
> > 1L;
> >
> >                         @Override
> >             protected void respond(AjaxRequestTarget target) {
> >                 beforeSignOut(target);
> >
> > ((WebDocsSession)WebSession.get()).processLogoutOrSessionExpiration(
> > );
> >
> >
> setResponsePage(WebApplication.get().getApplicationSettings().getPageE
> xpiredErrorPage());
> >             }
> >
> >             @Override
> >             protected void onBind() {
> >                 // panel will not be repainted, no need to markup 
> > markup id.
> >             }
> >
> >             @Override
> >             public void renderHead(Component component, 
> > IHeaderResponse
> > response) {
> >                 super.renderHead(component, response);
> >                 response.render(JavaScriptHeaderItem.forReference(JS));
> >             }
> >         });
> >     }
> >
> > -----Original Message-----
> > From: Ernesto Reinaldo Barreiro [mailto:reiern70@gmail.com]
> > Sent: Monday, May 12, 2014 11:39 AM
> > To: users@wicket.apache.org
> > Subject: Re: Ajax timer not counting when tab doesn't have focus?
> >
> > Hi Bruce,
> >
> >
> > On Mon, May 12, 2014 at 4:52 PM, Bruce Lombardi <brlombar@gmail.com>
> > wrote:
> >
> > > This message  is related to an original thread "Link to Wicket 
> > > page from Javascript" but the focus is changed so much  that I 
> > > though a new title would be better.  In the earlier thread I asked 
> > > about linking to a Wicket page, but the real need was for help in 
> > > implementing a session timeout that would send the user to a 
> > > timeout page after a period of inactivity and would reset whenever 
> > > a user clicked any button on the page.
> > >
> > >
> > >
> > > Ernesto Reinaldo Barreiro sent me links(see below) to a working 
> > > demo that did exactly what I required. I used  that code and 
> > > everything seemed to work perfectly. However, I have since 
> > > discovered that my timer does not seem to function correctly if 
> > > the user goes to another tab. It seems like the timer stops timing 
> > > down or slows way down until the user comes back to the original tab.
> > >
> > > Do you mean another browser tab?
> >
> > >
> > >
> > > I checked Ernesto's demo. If I go to the demo  page and stay there 
> > > it times out after roughly the defined 10 second timeout period,  
> > > but if I go to the demo page, then click on another tab, it 
> > > eventually times out, but after more than 3 minutes. My code, 
> > > however,  never seems to seem to timeout the page if I go to another tab.
> > >
> > > Does this happens in a all browsers? Or in particular one?
> >
> > Mind that this is just a quick "something" I build to illustrate the 
> > idea... So, it might not be bullet proof.
> >
> >
> > >
> > > I really need this to work to  fulfill a requirement and it is 
> > > preventing the launch of our software.  It all works fine except 
> > > if the user goes to a different tab.
> > >
> > >
> > >
> > > Ernesto, or anyone, do you know why this is happening. Is the ajax 
> > > timer stopping when the tab is not selected? Why is the demo 
> > > eventually timing out while application is not (can't see any real 
> > > difference in the code)?
> > >
> >
> > Without seeing your code or a quick-start app illustrating  the 
> > problem
> it
> > might be difficult to point out what's going on.
> >
> > >
> > > Is there any way to get a better handle on this (e.g., firebug)? 
> > > If the ajax timer is stopping, could something be done, perhaps 
> > > using absolute elapsed time, to expire the session immediately if 
> > > the user goes back to the tab?
> > > The latter is not ideal but might be acceptable.
> > >
> > >
> > >
> > > (Note: My session timeout in web.xml is 30 minutes, client timeout 
> > > is
> > > 15 minutes, but for testing I set it to 10 seconds).
> > >
> > >
> > >
> > >
> > >
> > > // Links
> > >
> > >
> > >
> > > Demo of Example
> > >
> > >
> > >
> > > http://107.170.4.97:9080/client-sign-out-demo/?0
> > >
> > >
> > >
> > >
> > >
> > > Code that sets up example
> > >
> > >
> > >
> > > https://github.com/reiern70/antilia-bits/blob/master/client-sign-o
> > > ut-p
> > > aren
> > >
> > > t/client-sign-out-demo/src/main/java/com/antilia/HomePage.java
> > >
> > >
> > >
> > >
> > >
> > > Code that provides the implementation (We have this code in  
> > > package
> > >
> > > com.xyzco.web.docs.presentation.helpers.timeout)
> > >
> > >
> > >
> > >
> > >
> > > https://github.com/reiern70/antilia-bits/tree/master/client-sign-o
> > > ut-p
> > > aren
> > >
> > > t/client-sign-out-demo/src/main/java/com/antilia
> > >
> > >
> > >
> > > Thanks,
> > >
> > > Bruce
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > -----Original Message-----
> > >
> > > From: Bruce Lombardi [mailto:brlombar@gmail.com]
> > >
> > > Sent: Monday, March 17, 2014 8:24 AM
> > >
> > > To: users@wicket.apache.org
> > >
> > > Subject: Re: Link to Wicket page from Javascript
> > >
> > >
> > >
> > > Thanks, this is very helpful.
> > >
> > >
> > >
> > > Bruce
> > >
> > >
> > >
> > > Sent from my iPad
> > >
> > >
> > >
> > > > On Mar 17, 2014, at 4:52 AM, Ernesto Reinaldo Barreiro
> > >
> > > <reiern70@gmail.com> wrote:
> > >
> > > >
> > >
> > > > You can see it at work here
> > >
> > > >
> > >
> > > > http://107.170.4.97:9080/client-sign-out-demo/
> > >
> > > >
> > >
> > > >
> > >
> > > > On Mon, Mar 17, 2014 at 9:18 AM, Ernesto Reinaldo Barreiro <
> > >
> > > > reiern70@gmail.com> wrote:
> > >
> > > >
> > >
> > > >> Martin,
> > >
> > > >>
> > >
> > > >> What I mean is something that triggers the sign out before 
> > > >> serve side
> > >
> > > >> session expires... and trigger this expire event.
> > >
> > > >>
> > >
> > > >>
> > >
> > > >> https://github.com/reiern70/antilia-bits/blob/master/client-sig
> > > >> n-ou
> > > >> t-
> > >
> > > >> parent/client-sign-out/src/main/java/com/antilia/signout/Inacti
> > > >> vity
> > > >> Si
> > >
> > > >> gnOutPanel.java
> > >
> > > >>
> > >
> > > >> https://github.com/reiern70/antilia-bits/blob/master/client-sig
> > > >> n-ou
> > > >> t-
> > >
> > > >> parent/client-sign-out/src/main/java/com/antilia/signout/Inacti
> > > >> vity
> > > >> Si
> > >
> > > >> gnOutPanel.js
> > >
> > > >>
> > >
> > > >> The above seem to work. You use it as in
> > >
> > > >>
> > >
> > > >>
> > >
> > > >> https://github.com/reiern70/antilia-bits/blob/master/client-sig
> > > >> n-ou
> > > >> t-
> > >
> > > >> parent/client-sign-out-demo/src/main/java/com/antilia/HomePage.
> > > >> java
> > >
> > > >>
> > >
> > > >>
> > >
> > > >>
> > >
> > > >>
> > >
> > > >> On Mon, Mar 17, 2014 at 9:11 AM, Martin Grigorov
> > >
> > > < <mailto:mgrigorov@apache.org> mgrigorov@apache.org>wrote:
> > >
> > > >>
> > >
> > > >>> Hi,
> > >
> > > >>>
> > >
> > > >>> On Fri, Mar 14, 2014 at 9:25 PM, Ernesto Reinaldo Barreiro <
> > >
> > > >>> reiern70@gmail.com> wrote:
> > >
> > > >>>
> > >
> > > >>>> Hi,
> > >
> > > >>>>
> > >
> > > >>>> I would implement this as..
> > >
> > > >>>>
> > >
> > > >>>> 1- A JS function that counts how much time has passed since

> > > >>>> last
> > >
> > > >>>> AJAX request. Once a certain threshold is passed an AJAX 
> > > >>>> request is
> > >
> > > >>>> sent to
> > >
> > > >>> the
> > >
> > > >>>> page.
> > >
> > > >>>> 2- An AbstractAjaxBehavior that is added to the page. I would

> > > >>>> use
> > >
> > > >>>> it as context for AJAX request on 1).
> > >
> > > >>>
> > >
> > > >>> at that time the session should be already expired.
> > >
> > > >>>
> > >
> > > >>> But this can be used to do what is needed here - Wicket will
> > >
> > > >>> redirect to the configured PageExpiredErrorPage.
> > >
> > > >>>
> > >
> > > >>>
> > >
> > > >>>> 3- On the respond of AJAXBehavior you redirect to
> > >
> > > >>>> SessionTimeoutPage
> > >
> > > >>> and
> > >
> > > >>>> invalidate the session.
> > >
> > > >>>>
> > >
> > > >>>>
> > >
> > > >>>>
> > >
> > > >>>> On Fri, Mar 14, 2014 at 8:07 PM, Bruce Lombardi
> > >
> > > >>>> <brlombar@gmail.com>
> > >
> > > >>>> wrote:
> > >
> > > >>>>
> > >
> > > >>>>> Hi,
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>> An earlier question I asked about session timeouts was

> > > >>>>> answered by
> > >
> > > >>> Martin
> > >
> > > >>>>> Grigorov. I am implementing his suggestion and have a
JQuery
> > >
> > > >>>>> script
> > >
> > > >>> what
> > >
> > > >>>>> sets a timer that times out after a certain period of
inactivity.
> > >
> > > >>>>> The timeout triggers a function call.  Currently,  for
a 
> > > >>>>> quick
> > >
> > > >>>>> test,  I
> > >
> > > >>> have
> > >
> > > >>>>> that function use location.href to go to an arbitrary
static 
> > > >>>>> web
> > >
> > > >>>>> page
> > >
> > > >>>> like
> > >
> > > >>>>> this:
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>> function whenUserIdle(){
> > >
> > > >>>>>
> > >
> > > >>>>>                location.href =
> > >
> > > >>>>> 'http://www.natural-environment.com';
> > >
> > > >>>>>
> > >
> > > >>>>> }
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>> That works fine, but now I need to make it go to a Wicket

> > > >>>>> page in
> > >
> > > >>>>> my application, similar to what would happen if I had
an 
> > > >>>>> anchor
> > >
> > > >>>>> tag
> > >
> > > like:
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>> <a wicket:id=" SessionTimeoutPage"
> > > >>>>> href="#">SessionTimeoutPage</a>
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>> But I can't figure out how to do this in the javascript
function.
> > >
> > > >>>>> Can anyone tell me how to call the Wicket page from the

> > > >>>>> javascript
> > >
> > > >>>>> function?
> > >
> > > >>>
> > >
> > > >>> You can use <script wicket:id="expirationUrl"></script>
and a
> > >
> > > >>> Label("expirationUrl", "window.expirePageUrl ='" +
> > >
> > > >>> urlFor(SessionTimeoutPage.class) + "';"); Then use it with:
> > >
> > > >>> location.href = window.expirePageUrl';
> > >
> > > >>>
> > >
> > > >>>
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>> Thanks,
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>>
> > >
> > > >>>>> Bruce
> > >
> > > >>>>
> > >
> > > >>>>
> > >
> > > >>>> --
> > >
> > > >>>> Regards - Ernesto Reinaldo Barreiro
> > >
> > > >>
> > >
> > > >>
> > >
> > > >>
> > >
> > > >> --
> > >
> > > >> Regards - Ernesto Reinaldo Barreiro
> > >
> > > >
> > >
> > > >
> > >
> > > >
> > >
> > > > --
> > >
> > > > Regards - Ernesto Reinaldo Barreiro
> > >
> > >
> > >
> > >
> >
> >
> > --
> > Regards - Ernesto Reinaldo Barreiro
> >
> >
> > --------------------------------------------------------------------
> > - To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> > For additional commands, e-mail: users-help@wicket.apache.org
> >
> >
>



--
Regards - Ernesto Reinaldo Barreiro


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Mime
View raw message