coderef

WebVRLimited availability

The navigator.getVRDisplays() API represents virtual reality (VR) devices, including sensors and head-mounted displays.

Not yet supported in all major browsers — check the table and provide a fallback.

Discouraged: Development of the WebVR API halted in favor of WebXR. Use instead: WebXR

Browser support

DesktopChrome
✕Not supportedup to 155
Current: 155
Edge
✕Not supportedup to 154
Current: 154
Firefox
✕Not supportedup to 157
Current: 157
Safari
✕Not supportedup to 27
Current: 27
MobileChrome Android
✕Not supportedup to 155
Current: 155
Firefox Android
✕Not supportedup to 157
Current: 157
Safari iOS
✕Not supportedup to 27
Current: 27

How to use

Not supported in Chrome, Edge, Firefox, Safari, Chrome Android, Firefox Android, Safari iOS. Use feature detection below and provide a fallback (or a polyfill) for those browsers.

Example

Full syntax and examples are on MDN: displayId.

Feature detection

JS · check before using
if ("PositionSensorVRDevice" in globalThis) {
  // PositionSensorVRDevice is available
} else {
  // load a polyfill or use a fallback
}

Sub-features

Support for each part of the feature (74). The overall table above shows when the whole feature works.

Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
Gamepad.displayId✕✕✕✕✕✕✕
Navigator.activeVRDisplays✕✕✕✕✕✕✕
Navigator.activeVRDisplays.secure_context_required✕✕✕✕✕✕✕
Navigator.getVRDisplays✕✕✕✕✕✕✕
PositionSensorVRDevice✕✕✕✕✕✕✕
PositionSensorVRDevice.getImmediateState✕✕✕✕✕✕✕
PositionSensorVRDevice.getState✕✕✕✕✕✕✕
PositionSensorVRDevice.resetSensor✕✕✕✕✕✕✕
VRDisplay✕✕✕✕✕✕✕
VRDisplay.cancelAnimationFrame✕✕✕✕✕✕✕
VRDisplay.capabilities✕✕✕✕✕✕✕
VRDisplay.depthFar✕✕✕✕✕✕✕
VRDisplay.depthNear✕✕✕✕✕✕✕
VRDisplay.displayId✕✕✕✕✕✕✕
VRDisplay.displayName✕✕✕✕✕✕✕
VRDisplay.exitPresent✕✕✕✕✕✕✕
VRDisplay.getEyeParameters✕✕✕✕✕✕✕
VRDisplay.getFrameData✕✕✕✕✕✕✕
VRDisplay.getImmediatePose✕✕✕✕✕✕✕
VRDisplay.getLayers✕✕✕✕✕✕✕
Show 54 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
VRDisplay.getPose✕✕✕✕✕✕✕
VRDisplay.isConnected✕✕✕✕✕✕✕
VRDisplay.isPresenting✕✕✕✕✕✕✕
VRDisplay.requestAnimationFrame✕✕✕✕✕✕✕
VRDisplay.requestPresent✕✕✕✕✕✕✕
VRDisplay.resetPose✕✕✕✕✕✕✕
VRDisplay.stageParameters✕✕✕✕✕✕✕
VRDisplay.submitFrame✕✕✕✕✕✕✕
VRDisplayCapabilities✕✕✕✕✕✕✕
VRDisplayCapabilities.canPresent✕✕✕✕✕✕✕
VRDisplayCapabilities.hasExternalDisplay✕✕✕✕✕✕✕
VRDisplayCapabilities.hasOrientation✕✕✕✕✕✕✕
VRDisplayCapabilities.hasPosition✕✕✕✕✕✕✕
VRDisplayCapabilities.maxLayers✕✕✕✕✕✕✕
VRDisplayEvent✕✕✕✕✕✕✕
VRDisplayEvent.VRDisplayEvent✕✕✕✕✕✕✕
VRDisplayEvent.display✕✕✕✕✕✕✕
VRDisplayEvent.reason✕✕✕✕✕✕✕
VREyeParameters✕✕✕✕✕✕✕
VREyeParameters.fieldOfView✕✕✕✕✕✕✕
VREyeParameters.maximumFieldOfView✕✕✕✕✕✕✕
VREyeParameters.minimumFieldOfView✕✕✕✕✕✕✕
VREyeParameters.offset✕✕✕✕✕✕✕
VREyeParameters.renderHeight✕✕✕✕✕✕✕
VREyeParameters.renderWidth✕✕✕✕✕✕✕
VRFieldOfView✕✕✕✕✕✕✕
VRFieldOfView.downDegrees✕✕✕✕✕✕✕
VRFieldOfView.leftDegrees✕✕✕✕✕✕✕
VRFieldOfView.rightDegrees✕✕✕✕✕✕✕
VRFieldOfView.upDegrees✕✕✕✕✕✕✕
VRFrameData✕✕✕✕✕✕✕
VRFrameData.VRFrameData✕✕✕✕✕✕✕
VRFrameData.leftProjectionMatrix✕✕✕✕✕✕✕
VRFrameData.leftViewMatrix✕✕✕✕✕✕✕
VRFrameData.pose✕✕✕✕✕✕✕
VRFrameData.rightProjectionMatrix✕✕✕✕✕✕✕
VRFrameData.rightViewMatrix✕✕✕✕✕✕✕
VRFrameData.timestamp✕✕✕✕✕✕✕
VRPose✕✕✕✕✕✕✕
VRPose.angularAcceleration✕✕✕✕✕✕✕
VRPose.angularVelocity✕✕✕✕✕✕✕
VRPose.linearAcceleration✕✕✕✕✕✕✕
VRPose.linearVelocity✕✕✕✕✕✕✕
VRPose.orientation✕✕✕✕✕✕✕
VRPose.position✕✕✕✕✕✕✕
VRStageParameters✕✕✕✕✕✕✕
VRStageParameters.sittingToStandingTransform✕✕✕✕✕✕✕
VRStageParameters.sizeX✕✕✕✕✕✕✕
VRStageParameters.sizeZ✕✕✕✕✕✕✕
Window.vrdisplayactivate_event✕✕✕✕✕✕✕
Window.vrdisplayconnect_event✕✕✕✕✕✕✕
Window.vrdisplaydeactivate_event✕✕✕✕✕✕✕
Window.vrdisplaydisconnect_event✕✕✕✕✕✕✕
Window.vrdisplaypresentchange_event✕✕✕✕✕✕✕