При закрытии вкладки сафари не отправляет событие beforeunload, вместо этого всплывает pagehide. На onunload данные просто не успевают отправится. Да и те два тоже не гарантируют. Но. Мы можем юзать sendBeacon который спецом для этого сделали. Но у него есть ограничения некоторые. Второй вариант это использовать фетч с флагом keepalive, который переводит запрос в фоновую работу не вкладки а браузера. Поэтому даже закрытие вкладки не остановит его выполнение. Так же как у sendBeacon