首页
/ 深入解析WHATWG Fullscreen API标准

深入解析WHATWG Fullscreen API标准

2025-06-19 22:56:18作者:龚格成

什么是Fullscreen API

Fullscreen API是一套允许网页元素以全屏模式显示的Web标准。通过这套API,开发者可以让特定元素(如视频、游戏画布等)占据整个屏幕空间,提供更沉浸式的用户体验。

核心概念解析

全屏元素与文档关系

每个文档(Document)都有一个关联的全屏元素(fullscreen element),它是文档顶层(top layer)中设置了全屏标志(fullscreen flag)的最上层元素。如果没有这样的元素,则该值为null。

// 获取当前文档的全屏元素
document.fullscreenElement;

全屏状态管理

元素进入全屏状态时,会经历以下过程:

  1. 设置元素的fullscreen flag
  2. 将元素添加到文档的top layer
  3. 触发相关事件

API接口详解

Element扩展

partial interface Element {
  Promise<undefined> requestFullscreen(optional FullscreenOptions options = {});
  
  // 事件处理器
  attribute EventHandler onfullscreenchange;
  attribute EventHandler onfullscreenerror;
};

requestFullscreen方法

这是让元素进入全屏的核心方法,它返回一个Promise对象:

const video = document.querySelector('video');
video.requestFullscreen()
  .then(() => console.log('进入全屏成功'))
  .catch(err => console.error('全屏失败:', err));

方法接受一个可选的FullscreenOptions参数,用于控制导航UI的显示:

enum FullscreenNavigationUI {
  "auto",  // 默认值,由浏览器决定
  "show",  // 优先显示导航UI
  "hide"   // 优先最大化屏幕空间
};

Document扩展

partial interface Document {
  readonly attribute boolean fullscreenEnabled;
  readonly attribute boolean fullscreen;  // 历史遗留属性
  
  Promise<undefined> exitFullscreen();
  
  // 事件处理器
  attribute EventHandler onfullscreenchange;
  attribute EventHandler onfullscreenerror;
};

重要属性方法

  • fullscreenEnabled: 检查当前文档是否允许使用全屏功能
  • exitFullscreen(): 退出全屏模式

全屏流程详解

进入全屏的完整步骤

  1. 前置检查

    • 元素必须属于HTML命名空间,或是SVG/MathML的特定元素
    • 不能是<dialog>元素
    • 必须通过全屏元素就绪检查
    • 必须有用户激活(如点击事件触发)
  2. 视图调整

    • 根据navigationUI选项调整视口尺寸
    • 可能显示退出全屏的提示信息
  3. 状态更新

    • 设置元素的fullscreen flag
    • 将元素添加到文档的top layer
    • 触发fullscreenchange事件

退出全屏的流程

  1. 收集需要退出的文档

    • 从当前文档开始向上遍历
    • 检查每个文档的全屏状态
  2. 视图恢复

    • 将视口尺寸恢复为正常大小
  3. 状态清理

    • 清除相关元素的fullscreen flag
    • top layer中移除元素
    • 触发fullscreenchange事件

特殊场景处理

iframe中的全屏

当iframe中的内容请求全屏时:

  1. 会设置iframe元素的iframe fullscreen flag
  2. 同时全屏iframe元素本身
  3. 确保嵌套浏览上下文的全屏状态一致

元素移除时的处理

当全屏元素被从DOM中移除时:

  1. 自动退出全屏模式
  2. 清理相关状态标志
  3. 触发相应事件

安全与权限考虑

Fullscreen API设计时考虑了多种安全因素:

  1. 用户激活要求:必须由用户交互触发,不能自动全屏
  2. 功能检测:通过fullscreenEnabled检查权限
  3. 视觉提示:建议浏览器提供退出全屏的提示

最佳实践建议

  1. 始终检查支持情况

    if (document.fullscreenEnabled) {
      // 安全使用全屏API
    }
    
  2. 提供退出方式

    document.addEventListener('keydown', (e) => {
      if (e.key === 'Escape') {
        document.exitFullscreen();
      }
    });
    
  3. 处理全屏变化

    document.addEventListener('fullscreenchange', () => {
      if (document.fullscreenElement) {
        console.log('进入全屏模式');
      } else {
        console.log('退出全屏模式');
      }
    });
    

浏览器兼容性说明

虽然WHATWG标准定义了统一的行为,但不同浏览器实现可能有细微差异:

  1. 前缀处理:早期版本可能需要webkitRequestFullscreen等带前缀API
  2. 导航UI表现:不同浏览器对navigationUI选项的处理可能不同
  3. 全屏样式::fullscreen伪类可能需要浏览器前缀

总结

WHATWG Fullscreen API标准为Web开发者提供了控制全屏显示的能力,通过清晰的接口定义和状态管理机制,使得创建沉浸式Web应用成为可能。理解其核心概念、API接口和特殊场景处理,将帮助开发者更好地利用这一功能,同时确保良好的用户体验和安全性。

登录后查看全文
热门项目推荐