Work 02

时间折叠 · 播放器实验

劫持 HTMLMediaElement 的 duration / currentTime / ended,把原生 3 倍速在页面上伪装成 1 倍速。

Year
2026
Role
独立开发 · 页面行为分析 / 原型实现
Stack
JavaScript / HTMLMediaElement / 属性描述符 / MutationObserver
Status
实验记录

页面靠 video.duration 和 currentTime 判断进度,还会监听 ended 自动切下一节。所以只改 playbackRate 不够——得把这几个口子一起接管。

做法是给每个 iframe realm 单独取一份原生描述符,用 WeakMap 缓存;getter 返回折叠后的值(时长 ×3、进度 ÷3),setter 把写入折算回真实值。

ended 事件在捕获阶段用 stopImmediatePropagation 拦掉,再按虚拟进度补发 timeupdate,直到伪造的 duration 走完才放行切换。

全部状态收在 __cx 上,stop() 能还原描述符、倍速和 ended,页面不用刷新。

仅作前端实验记录,不提供安装或使用说明。

← 返回作品