主游戏用 iframe 嵌子游戏时,如果两边跨域,浏览器会限制子游戏里的 requestAnimationFrame,动画 / Canvas / WebGL 容易掉帧。用户在子游戏 iframe 里点一下之后,帧率又会恢复。这是浏览器对跨域 iframe 的锁帧策略,不是游戏循环写挂了。
现象
- 子游戏单独打开:帧率正常
- 被主游戏跨域 iframe 嵌入:rAF 变稀、掉帧
- 在子游戏区域 click / tap 一次:解锁,恢复流畅
父页面没法可靠地替子游戏「假点」解锁,跨域也过不了真实用户手势的判定。
方案:同源嵌入
主游戏和子游戏应放在同一源下用 iframe 嵌入。同源 iframe 一般不会吃这套跨域锁帧,子游戏可以一进来就满帧跑,也不用再引导用户多点一次。
常见做法:
- 主游戏、子游戏挂同一域名(或同协议 + 域名 + 端口)
- 子游戏资源走主站反向代理,对外仍是主站同源地址
跨域嵌套再靠「点一下解锁」只适合广告类内容;主从游戏这种强互动场景,直接上同源更干净。