跳转到内容

Window Management API 浏览器支持

发布于 更新于

Window Management API 让页面可以得知设备是否连接了多个屏幕 (window.screen.isExtended),并在用户同意权限提示后,读取每块屏幕的详细 信息,从而精确地放置窗口(Window.getScreenDetails())。

  • 图例
  • 支持
  • 部分支持
  • 需开启标志
  • 不支持
  • 未知
浏览器 / 平台支持版本置信度来源备注
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
  1. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  2. 由 browser-compat-data 镜像自 Chrome 的数据推导。
  3. browser-compat-data 未记录 Firefox 的支持。
  4. browser-compat-data 未记录 Firefox for Android 的支持。
  5. 由 browser-compat-data 镜像自 Firefox 的数据推导。
  6. browser-compat-data 未记录 Safari 的支持。
  7. browser-compat-data 未记录 iOS 版 Safari 的支持。
  8. 由 browser-compat-data 镜像自 Safari 的数据推导。
  9. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。
  10. 由 browser-compat-data 镜像自 Chrome Android 的数据推导。

源数据: /compatibility/window-management.json · 全球使用占比: 72 % (StatCounter 2026-05)

来源: 规范 · MDN · 最近核验 2026-10-03 · 置信度: 高 (由来源计算)

请求屏幕详细信息,然后把窗口打开在指定的屏幕上:

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`,
);
}

调用前先特性检测 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() 调用。

← 返回兼容性浏览器。