implement jsStorage with tab/window channels - reduce heartbeat to one per browser