Earlier quoted context omitted.
I think, there's still use for it. E.g., I recall when Chrome 32 would fail to play a newly created Web Audio BufferSource, unless the playback call came from inside a decodeAudioData() callback. At the same time, you couldn't use this approach to playback sound from e.g. Safari iOS, since the callback lacked the user interaction blessing, resulting in muted audio. Try-catch wasn't an option either, since, as soon as…
Also this: https://catchjs.com/Blog/SameSiteCookies
The link explains the problem really well.
User agent sniffing was the only option.
We have a lot of end users on older iPads that can't upgrade to a newer browser.
These users are the general public, so you can't force them to upgrade devices.
We will have to continue to do the user agent sniffing for years to come.