Only One Tab
Run a function in exactly one open tab, switching to another if closed.
Goals
- Robust across browsers
- Fully tested
Usage
const onlyOneTab = require('only-one-tab')
onlyOneTab(() => {
startDaemon()
})
API
onlyOneTab(cb)
The callback is run only once per tab, and on exactly one tab at a time. When the actor tab that ran the callback is closed, then exactly one other open tab runs its callback to replace it as the actor.
Recovery
After a browser crash, or something similar, the actor tab can be closed without being replaced normally.
Every tab periodically checks for an active tab's heartbeat, and after 1-4 seconds, a new tab will become the actor to replace the crashed tab. A refresh or new tab will do the check immediately on startup as well.
If nothing goes wrong, a new actor replaces the closed tab immediately.