Hay un caso de uso muy específico en el que cualquier sugerencia de usar sessionStorage en lugar de localStorage realmente no ayuda. El caso de uso sería algo tan simple como tener algo almacenado mientras tiene al menos una pestaña abierta, pero invalidarlo si cierra la última pestaña restante. Si necesita que sus valores se guarden en tablas y ventanas, sessionStorage no lo ayudará a menos que le complique la vida a los oyentes, como lo he intentado. Mientras tanto, localStorage sería perfecto para esto, pero hace el trabajo "demasiado bien", ya que sus datos estarán esperando allí incluso después de reiniciar el navegador. Terminé usando un código personalizado y una lógica que aprovecha ambos.
Prefiero explicar y luego dar el código. Primero almacene lo que necesita en localStorage, luego también en localStorage cree un contador que contendrá el número de pestañas que ha abierto. Esto aumentará cada vez que se cargue la página y disminuirá cada vez que la página se descargue. Puede elegir aquí los eventos que usará, sugeriría 'cargar' y 'descargar'. En el momento de la descarga, debe realizar las tareas de limpieza que le gustaría cuando el contador llegue a 0, lo que significa que está cerrando la última pestaña. Aquí viene la parte difícil: no he encontrado una forma confiable y genérica de diferenciar entre una recarga de página o navegación dentro de la página y el cierre de la pestaña. Entonces, si los datos que almacena no son algo que puede reconstruir en la carga después de verificar que esta es su primera pestaña, entonces no puede eliminarlo en cada actualización. En su lugar, debe almacenar un indicador en sessionStorage en cada carga antes de aumentar el contador de pestañas. Antes de almacenar este valor, puede hacer una verificación para ver si ya tiene un valor y si no lo tiene, esto significa que está cargando en esta sesión por primera vez, lo que significa que puede hacer la limpieza en la carga si esto el valor no está establecido y el contador es 0.