画中画文档演示 - Document Picture-in-Picture API
打开一个始终置顶的小窗口,在其中显示自定义内容(例如笔记/时钟),实验新API。
UD5工具箱
Window Placement API 是一个现代Web API,允许Web应用查询连接的多个显示器的详细信息(如屏幕标签、分辨率、坐标位置、是否主屏幕等),并在指定的屏幕上放置或移动浏览器窗口。
在传统Web开发中,开发者只能通过 window.screen 获取主屏幕的基本信息,无法感知多屏幕环境。Window Placement API 填补了这一空白,使得:
getScreenDetails() 获取多屏幕信息?
调用 window.getScreenDetails() 会返回一个 Promise,解析后得到包含 screens 数组和 currentScreen 属性的对象:
const screenDetails = await window.getScreenDetails();
// screenDetails.screens - 所有屏幕的 ScreenDetailed 数组
// screenDetails.currentScreen - 当前窗口所在的屏幕
screenDetails.screens.forEach(screen => {
console.log(screen.label, screen.width, screen.height);
console.log('位置:', screen.left, screen.top);
console.log('是否主屏:', screen.isPrimary);
console.log('是否内置:', screen.isInternal);
});
首次调用时会触发浏览器权限弹窗,用户授权后才能获取详细屏幕信息。建议在用户点击按钮时调用,而不是页面加载时自动调用。
截至2024年,Window Placement API 的支持情况:
getScreenDetails()、screen.isExtended、screenschange 事件window.screen 获取有限信息)需要使用 HTTPS 或 localhost 环境。对于不支持的浏览器,可以降级使用传统的 window.screen API 获取主屏幕基本信息。
检测代码:'getScreenDetails' in window 或检查 screen.isExtended 属性。
screen.isExtended 属性有什么作用?
screen.isExtended 是一个布尔属性(Chrome 100+),无需用户授权即可访问。它快速告诉你当前是否连接了多个屏幕:
这是一个轻量级的预检查方法,可以用来决定是否需要调用 getScreenDetails() 获取详细的多屏幕信息。在单屏幕环境下可以跳过权限请求,优化用户体验。
有几种方法可以在多屏幕间管理窗口:
left 和 top 在目标屏幕坐标打开新窗口。window.open(url, '_blank', 'left=2000,top=100,width=800,height=600');需要注意浏览器弹窗拦截策略——window.open 需要在用户交互(点击)中调用,且某些浏览器对 moveTo 有限制。
传统 Screen API(window.screen)仅提供主屏幕的有限信息:
screen.width / screen.height — 主屏幕分辨率screen.availWidth / screen.availHeight — 主屏幕可用空间screen.colorDepth — 色深Window Placement API 在此基础上大幅扩展:
简单来说,传统API只能看到主屏幕,Window Placement API能看到完整的桌面空间布局。
Window Placement API 提供了两个事件来监听屏幕配置变化:
ScreenDetails 对象上监听。const screenDetails = await window.getScreenDetails();
screenDetails.addEventListener('screenschange', () => {
console.log('屏幕配置已变化!');
// 重新获取屏幕信息
});
screenDetails.addEventListener('currentscreenchange', () => {
console.log('当前窗口切换到了屏幕:', screenDetails.currentScreen.label);
});
这对于需要实时响应显示器热插拔的应用非常重要,如重新布局窗口或调整UI。
安全性:
window-management 权限,浏览器会明确提示用户授权最佳实践:
screen.isExtended 预检查,避免不必要的权限请求screenschange 事件,优雅处理显示器热插拔打开一个始终置顶的小窗口,在其中显示自定义内容(例如笔记/时钟),实验新API。
请求用户允许读取系统剪贴板,并展示内容,显示权限状态变化。
设置不同验证属性和自定义消息,测试HTML5表单验证触发效果。
展示各种 HTML5 验证属性(required, pattern, min, max 等)和自定义验证消息的效果。
在单页内模拟MPA过渡效果,自定义进场/出场动画,体验View Transitions API丝滑切换。
定义字段名称和类型(姓名、邮箱、数字范围等),批量生成符合规则的 JSON 模拟数据。
使用原生HTML Popover属性创建提示、菜单与对话框,展示四种触发方式及样式定制。
使用Permissions API检查摄像头、地理位置、通知等权限的当前状态和可查询性。
展示一些常用内置HTML元素和自定义元素例子,提供代码复制。
向任意输入URL发送请求,清晰显示响应状态码、头信息和体,类似轻量级Postman。
测试navigator.clipboard读写功能,写入文本或读取系统剪贴板,验证安全限制。
设置浏览器标题和图标,模拟在暗色/亮色主题下标签栏的样子。
粘贴自定义图标字体的Unicode,调节尺寸颜色立即查看效果。
选择各种数据类型演示structuredClone的深拷贝能力,对比JSON.parse的限制。
利用浏览器地理位置和公开API,显示当前位置的天气图标和温度。
记录页面交互触发的所有DOM事件及其目标、冒泡阶段,以日志和瀑布形式展示。
逐步展示SW从注册、安装到激活的完整流程,并模拟更新与跳过等待的场景。
配置启动画面背景色与图标,生成对应manifest和meta标签代码。
显示当前页面所有资源的详细加载时序(DNS、连接、等待、接收),帮助优化。
编写O与对应KR,可视化进度条与完成度,团队或个人目标跟踪的轻量替代。
内置多种轻短的通知声音,点击试听,选择配套项目使用(提供Base64代码)。
提供一份涵盖性能、安全、备份、监控等上线前检查清单,可自定义勾选。
创建当用户离线时展示的简单HTML页面,结合Service Worker使用。
生成形似iOS或Android的开关切换按钮,支持动画和自定义颜色。
对比 ES Module 和经典脚本的变量作用域、严格模式以及执行时机。
使用Service Worker拦截fetch请求,并返回用户自定义的JSON模拟数据,用于前端独立开发。
创建闪卡并根据掌握程度放入5个盒子,按照不同间隔自动提供今日复习卡组。
使用 ImageDecoder API 解码图片并逐帧显示(若为动图),展示底层编解码能力。
覆盖加载、渲染、安全、可访问性等领域的自查清单,勾选后生成得分与建议。
配置字体、颜色、背景,生成可粘贴到浏览器控制台的%c格式化日志代码。