promise仅能判断全屏请求是否被浏览器接受,真正状态变化必须监听fullscreenchange事件;通过document.fullscreenelement判别是否全屏,同时需处理fullscreenerror事件以捕获静默失败。

Promise 本身不能直接监听全屏切换状态,因为它只用于处理异步操作的“一次性”结果。全屏切换(requestFullscreen / exitFullscreen)虽返回 Promise,但状态变化(如用户按 Esc、点击退出、系统强制退出)会触发全局事件,需结合 fullscreenchange 和 fullscreenerror 事件来响应。
用 Promise 封装请求全屏操作
调用 element.requestFullscreen() 返回一个 Promise,可用来判断请求是否成功发起(注意:成功 resolve 不代表已进入全屏,只是浏览器接受了请求):
- resolve 表示浏览器开始处理全屏请求(例如无权限拦截、被拒绝时会 reject)
- reject 常见原因:非用户手势触发、iframe 未设置
allow="fullscreen"、文档隐藏等 - 实际是否进入全屏,必须监听后续的
fullscreenchange事件
监听全屏状态变化要用事件,不是 Promise
fullscreenchange 是唯一可靠的全屏状态同步机制,它在任何方式触发状态变更时都会触发(包括用户操作、脚本调用、系统中断):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 监听
document上的fullscreenchange事件 - 通过
document.fullscreenElement判断当前是否处于全屏:
→ 有值表示某元素正全屏;
→null表示未全屏 - 不要依赖 Promise 的 then/catch 来判断最终状态,它们只反映请求阶段
组合使用:Promise + 事件实现可靠状态管理
可封装一个函数,既返回操作 Promise,又自动绑定一次状态监听,适合需要“等待真正进入全屏”的场景:
- 调用
requestFullscreen(),捕获其 Promise - 同时注册一个仅触发一次的
fullscreenchange监听器 - 在监听器中检查
document.fullscreenElement,匹配成功则 resolve;若超时或退出则 reject - 注意清理事件监听器,避免内存泄漏
错误处理不能只靠 Promise catch
fullscreenerror 事件比 Promise reject 更全面,某些静默失败(如策略限制未抛异常)可能只触发该事件:
- 始终监听
document上的fullscreenerror - 配合日志或 UI 提示,帮助定位问题(例如 Chrome 中 iframe 缺少 allow 属性)
- Promise reject 和
fullscreenerror都应处理,二者不互斥
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










