From 2015 to 2018, I was a software engineer on WITHIN's spherical video + binaural audio webplayer and WebVR platform. I implemented 3D user interface elements for usability in WebVR, including a cylindrical paginated thumbnail grid, lake environment, video detail view with play and back buttons, video player controls with replay, pause/play, resolution and back buttons, and a timeline seek bar. The detail view and video controls required the use of SDF Bitmap Text. I added support for VR displays and VR controllers with the WebVR API and Gamepad API.
Supported devices include Oculus Rift, Vive, Windows MR, Oculus Go, GearVR and Daydream. A user with any of these headsets and a browser that supports WebVR can select "Enter VR" to browse and watch a curated collection of spherical videos within their web browser. I frequently tested the site and fixed bugs on each of these platforms to ensure they were working in their supported browser.
WebVR is generally headset agnostic. Remaining accessible with controller fragmentation can be a challenge. But thanks to a fork of Stewart Smith's THREE.VRController, you can access the state of any button or axes on any controller connected through the Gamepad API. Any 3DOF or 6DOF controller should be able to "hover" over a user interface element by pointing at it with a ray, and selecting it with a primary button press. Controller models are loaded in to match the user's controller when it is connected. A user with Oculus Touch controllers will see Oculus Touch controllers, Oculus Go users will see an Oculus Go controller, etc. Users can also use a mouse, XBox controller, keyboard arrow keys and spacebar, or 0DOF DPad (like the Oculus Remote) to navigate the interface.