html5 不支持 windowplacement api,无法原生控制窗口跨屏放置;可通过多窗口+postmessage同步状态、screen api获取屏幕信息、单页多区域投影或electron等桌面框架实现近似效果。

使用多窗口 + postMessage 实现主从同步
打开多个浏览器窗口(例如:主屏为讲师视图,副屏为全屏观众视图),通过 window.open() 创建副窗口,并用 postMessage 同步当前页码、动画状态、播放进度等。
- 主窗口调用
const slave = window.open('viewer.html', '_blank')打开副屏页面 - 主窗口监听翻页操作,发送
slave.postMessage({ type: 'navigate', slide: 5 }, '*') - 副屏页面监听
message事件,响应跳转或触发 CSS 动画 - 注意:现代浏览器对
window.open的弹窗拦截较严格,建议由用户手势(如点击按钮)触发
利用 Screen API 获取屏幕信息(仅读取,不可控制)
navigator.screen 和 window.screen 可读取当前窗口所在屏幕的尺寸、方向、缩放等信息;window.getScreenDetails()(实验性,需 HTTPS + 用户许可)可获取所有连接屏幕的列表,但不能移动窗口、不能指定窗口在哪块屏打开。
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 可用于适配:比如检测是否在大屏上运行,自动启用双栏模式
- 示例:
if (screen.width > 1920) { enableDualView() } - 不能用于“把窗口 A 强制放到屏幕 2 上”——浏览器出于安全与隐私限制,禁止网页随意操控窗口位置
替代方案:单页面 + 多区域投影(推荐)
放弃多窗口思路,改用单页面内划分逻辑区域,配合外部硬件或系统级投屏实现“视觉上的多屏同步”:
- 将演示文稿设计为左右/上下分栏布局,左侧为备注+控制区(主屏),右侧为纯净幻灯片(可 HDMI 输出到副屏)
- 使用 Chrome 的「投射」功能(
chrome://dino类似入口 → “投射此标签页”),将特定<iframe></iframe>或div投到第二屏幕(依赖操作系统和显卡支持) - 结合
requestFullscreen()+document.fullscreenElement精确控制某区块全屏显示于目标显示器(仍受限于系统行为)
进阶选择:Electron 或 Tauri 桌面应用
若必须精准控制多窗口跨屏布局(如左屏控制面板、右屏全屏播放、顶部状态栏),应脱离纯浏览器环境:
- Electron 提供
BrowserWindow构造选项:{ x: 1920, y: 0, width: 1920, height: 1080 },可显式指定窗口坐标(基于多屏合并后的虚拟坐标系) - 搭配
screen.getAllDisplays()获取各屏位置,实现“窗口自动停靠到第二屏” - 适合打包为本地演示工具,但不再属于“纯 HTML5”范畴
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










