Window Management API 浏览器支持
发布于 更新于
Window Management API 让页面可以得知设备是否连接了多个屏幕
(window.screen.isExtended),并在用户同意权限提示后,读取每块屏幕的详细
信息,从而精确地放置窗口(Window.getScreenDetails())。
浏览器与生态支持
Section titled “浏览器与生态支持”- 图例
- 支持
- 部分支持
- 需开启标志
- 不支持
- 未知
| 浏览器 / 平台 | 支持 | 版本 | 置信度 | 来源 | 备注 |
|---|---|---|---|---|---|
| Chrome (Desktop) | 支持 | 100 | 高 | 来源 | — |
| Chrome (Android) | 支持 | 100 | 高 | 来源 | 1 |
| Edge (Desktop) | 支持 | 100 | 高 | 来源 | 2 |
| Firefox (Desktop) | 不支持 | — | 高 | 来源 | 3 |
| Firefox (Android) | 不支持 | — | 高 | 来源 | 45 |
| Safari (macOS) | 不支持 | — | 高 | 来源 | 6 |
| Safari (iOS) | 不支持 | — | 高 | 来源 | 78 |
| Samsung Internet | 支持 | 19.0 | 高 | 来源 | 9 |
| WebView (Android) | 支持 | 100 | 高 | 来源 | 10 |
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- 由 browser-compat-data 镜像自 Chrome 的数据推导。
- browser-compat-data 未记录 Firefox 的支持。
- browser-compat-data 未记录 Firefox for Android 的支持。
- 由 browser-compat-data 镜像自 Firefox 的数据推导。
- browser-compat-data 未记录 Safari 的支持。
- browser-compat-data 未记录 iOS 版 Safari 的支持。
- 由 browser-compat-data 镜像自 Safari 的数据推导。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
- 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
请求屏幕详细信息,然后把窗口打开在指定的屏幕上:
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`, );}如何在运行时检测
Section titled “如何在运行时检测”调用前先特性检测 getScreenDetails,当该 API(或它所需的权限)不可用时,
回退到打开一个普通窗口:
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'); }}Window.getScreenDetails()需要window-management权限——调用该方法会 向用户请求管理其所有显示器上窗口的权限。window.screen.isExtended报告设备是否有多块屏幕,但当window-management权限策略阻止该 API 时,即使设备有多块屏幕,它也始终 返回false。- 现代浏览器要求每次调用
window.open()都需要独立的用户手势,并建议一次 最多打开一个新窗口,或复用已有窗口显示不同页面,而不是连续打开多个窗口。 - 请保留上面的回退路径,让功能在该 API 不可用的浏览器中优雅降级为普通的
window.open()调用。
← 返回兼容性浏览器。