Work 02
时间折叠 · 播放器实验
劫持 HTMLMediaElement 的 duration / currentTime / ended,把原生 3 倍速在页面上伪装成 1 倍速。
页面靠 video.duration 和 currentTime 判断进度,还会监听 ended 自动切下一节。所以只改 playbackRate 不够——得把这几个口子一起接管。
做法是给每个 iframe realm 单独取一份原生描述符,用 WeakMap 缓存;getter 返回折叠后的值(时长 ×3、进度 ÷3),setter 把写入折算回真实值。
ended 事件在捕获阶段用 stopImmediatePropagation 拦掉,再按虚拟进度补发 timeupdate,直到伪造的 duration 走完才放行切换。
全部状态收在 __cx 上,stop() 能还原描述符、倍速和 ended,页面不用刷新。
仅作前端实验记录,不提供安装或使用说明。