Window Management API browser support
Published Updated
The Window Management API lets a page find out whether the device has more than
one screen (window.screen.isExtended) and, after the user grants a permission
prompt, read detailed per-screen information to place windows precisely
(Window.getScreenDetails()).
Browser & ecosystem support
Section titled “Browser & ecosystem support”- Legend
- Yes
- Partial
- Flag
- No
- Unknown
| Browser / Platform | Support | Versions | Confidence | Source | Notes |
|---|---|---|---|---|---|
| Chrome (Desktop) | Yes | 100 | high | source | — |
| Chrome (Android) | Yes | 100 | high | source | 1 |
| Edge (Desktop) | Yes | 100 | high | source | 2 |
| Firefox (Desktop) | No | — | high | source | 3 |
| Firefox (Android) | No | — | high | source | 45 |
| Safari (macOS) | No | — | high | source | 6 |
| Safari (iOS) | No | — | high | source | 78 |
| Samsung Internet | Yes | 19.0 | high | source | 9 |
| WebView (Android) | Yes | 100 | high | source | 10 |
- Derived by browser-compat-data mirroring from Chrome.
- Derived by browser-compat-data mirroring from Chrome.
- No Firefox support is recorded in browser-compat-data.
- No Firefox for Android support is recorded in browser-compat-data.
- Derived by browser-compat-data mirroring from Firefox.
- No Safari support is recorded in browser-compat-data.
- No Safari on iOS support is recorded in browser-compat-data.
- Derived by browser-compat-data mirroring from Safari.
- Derived by browser-compat-data mirroring from Chrome Android.
- Derived by browser-compat-data mirroring from Chrome Android.
How to use it
Section titled “How to use it”Request the screen details, then open a window positioned on a specific screen:
async function openOnSecondScreen(url) { const screenDetails = await window.getScreenDetails(); const target = screenDetails.screens.find( (screen) => screen !== screenDetails.currentScreen, ); if (!target) return; window.open( url, '_blank', `left=${target.availLeft},top=${target.availTop},width=800,height=600`, );}How to detect it at runtime
Section titled “How to detect it at runtime”Feature-detect getScreenDetails before calling it, and fall back to opening a
plain window when the API — or the permission it requires — is unavailable:
async function openWithScreenDetails(url) { if (!('getScreenDetails' in window)) { window.open(url, '_blank'); return; } try { const screenDetails = await window.getScreenDetails(); const target = screenDetails.screens.find( (screen) => screen !== screenDetails.currentScreen, ); window.open( url, '_blank', target ? `left=${target.availLeft},top=${target.availTop}` : undefined, ); } catch { window.open(url, '_blank'); }}Practical checklist
Section titled “Practical checklist”Window.getScreenDetails()requires thewindow-managementpermission — calling it asks the user for permission to manage windows on all their displays.window.screen.isExtendedreports whether the device has multiple screens, but it always returnsfalsewhen thewindow-managementPermissions Policy blocks the API, even on a multi-screen device.- Each
window.open()call needs its own user gesture in modern browsers, and browsers recommend opening at most one window at a time or reusing an existing window rather than opening several in a row. - Keep the fallback path above for browsers where the API is unavailable, so
the feature degrades to a normal
window.open()call.
Where to go next
Section titled “Where to go next”← Back to the Compatibility explorer.