tejacques / crosstab

A utility library for cross-tab communication using localStorage.
Apache License 2.0
364 stars 58 forks source link

Is it possible to process a setInterval() call only to the active tab/browser? #30

Closed malhayek2014 closed 9 years ago

malhayek2014 commented 9 years ago

is it possible to have only the active tab execute a setInterval() function only on the active tab?

so if I am on tab A then execute setInterval() function which triggers an API page. then when I open tab B then the setInterval()on tab A will need to stop and the function on tab B starts.

is this possible and how?

thanks you

tejacques commented 9 years ago

This is not currently possible with this library. The general approach taken with crosstab, is that if something needs to happen on all tabs, it can be done on the master and then the master can inform other tabs to update.

I'm not sure what your specific use-case is, but using the above approach might be a possibility for you depending on the situation.

malhayek2014 commented 9 years ago

I have a script that calls an API every second and based on the respond either it displays a dialog box on the screen or shows a message.

What I am trying to do is to prevent the client from calling the API from multiple browsers "one call per second form one user regardless of how many tabs open." Also, I want to make sure that even if the user navigates to a different tab, I want them to get the new updates on every tab they go.

tejacques commented 9 years ago

In that case, I would have a function that polls document.visibilityState or document.hasFocus(), when it changes from hidden to visible, start your function, and when it changes from visible to hidden, stop it. You don't really need crosstab, unless your API call is over websockets or some connection object you'd like to share across tabs.