Ich berichtete mal über navigator.sendBeacon. Damit kann man HTTP-Requests absetzen, die der Browser dann macht, sobald der User den Tab schließt. sendBeacon hatte den Nachteil, dass man nut GET-Requests machen kann.
Chrome hat da mal wieder was gebaut: fetchLater. Das ist identisch zum normalen fetch, nur dass es wie sendBeacon erst abschickt, wenn der Tab geschlossen wird. Sie gibt nur kein Promise zurück, sondern ein FetchLaterResult, wo einfach nur drin steht, ob das Einreihen des Requests geklappt hat.