【踩坑记录】使用 Layui 框架时解决 Unity WebGL 渲染在 Tab 切换时黑屏问题

【踩坑记录】使用 Layui 框架时解决 Unity WebGL 渲染在 Tab 切换时黑屏问题

【踩坑记录】使用 Layui 框架时解决 Unity WebGL 渲染在 Tab 切换时黑屏问题

在开发 Web 应用时,尤其是集成了 Unity WebGL 内容的页面,遇到一个问题:当 Unity WebGL 渲染内容嵌入到一个 Tab 中时,切换 Tab 后画面会变黑,直到用户点击黑屏区域,才会恢复显示。

这个问题通常是因为 Unity 渲染在 Tab 切换时被暂停或未能获得焦点所致。

在本文中,我们将介绍如何在使用 Layui 框架时,通过监听 Tab 切换事件并强制 Unity WebGL 渲染恢复,来解决这一问题。

1. 问题描述

当 Unity WebGL 内容嵌入到页面中的多个 Tab 中时,用户切换 Tab 时,Unity 渲染内容可能会变黑。问题的根源通常是 Unity 渲染在 Tab 切换后没有正确地恢复,导致渲染被暂停或者丢失。

2. 解决思路

要解决这个问题,关键是确保每次切换到包含 Unity WebGL 的 Tab 时,Unity 渲染能够继续运行。具体思路如下:

  • 监听 Tab 切换事件:通过 Layui 框架提供的事件,监听 Tab 切换,获取当前激活的 Tab。
  • 强制 Unity canvas 获取焦点:每当 Tab 切换时,通过 JavaScript 强制切换到的 Tab 中的 Unity canvas 元素获得焦点,这样 Unity 渲染就能继续正常显示。

3. 解决方案实现

步骤 1:监听 Tab 切换事件

Layui 框架中的 element 模块提供了 tab 事件,可以用于监听 Tab 的切换。当 Tab 切换时,可以通过事件获取到当前活动 Tab 的索引值,并确定哪个 Tab 中包含 Unity WebGL 内容。

步骤 2:获取当前 Tab 中的 Unity canvas

Unity WebGL 通常嵌入在一个 iframe 中,iframe 内部包含 Unity 渲染的 canvas 元素。在 Tab 切换时,我们需要访问该 iframe,并获取其中的 Unity canvas 元素。

步骤 3:强制获取焦点

JavaScript 的 focus() 方法可以确保 canvas 元素获得焦点,从而恢复 Unity 的渲染。

完整代码实现
layui.use(['element'],function(){var element = layui.element;// 监听 Tab 切换事件 element.on('tab(xbs_tab)',function(data){// 获取当前选中的 tab 对应的 iframevar activeTabId = data.index;var iframe =$('.x-iframe').eq(activeTabId);// 获取当前 tab 对应的 iframe// 获取 iframe 中的 Unity canvas 元素,若存在,则主动获取焦点var unityCanvas = iframe.contents().find('#unity-canvas')[0];if(unityCanvas){ unityCanvas.focus();// 强制 Unity canvas 获取焦点}});});

4. 代码解析

  • layui.use(['element'], function() {...}):加载 Layuielement 模块,使用 element 模块来处理 Tab 事件。
  • element.on('tab(xbs_tab)', function(data) {...}):监听 tab(xbs_tab) 事件,用户切换 Tab 时触发该回调函数。
  • $('.x-iframe').eq(activeTabId):通过 activeTabId 获取当前选中的 Tab 对应的 iframe 元素。
  • iframe.contents().find('#unity-canvas')[0]:获取当前 iframe 中的 Unity WebGL canvas 元素。
  • unityCanvas.focus():强制 Unity canvas 获取焦点,确保渲染恢复。

5. 测试与优化

在实现了上述代码后,切换 Tab 时 Unity 渲染应能正常恢复。如果仍然存在渲染延迟或异常的情况,可以尝试以下优化措施:

  • Tab 切换时延迟处理:如果需要在 Unity WebGL 内容加载完成后再恢复渲染,可以在切换 Tab 后稍作延迟再调用 focus() 方法。
  • 确保 iframe 加载完成:确保 iframe 中的内容加载完成后再进行焦点恢复操作。可以通过监听 iframe 的加载事件来控制焦点的恢复时机。

6. 总结

通过监听 Layui 框架的 Tab 切换事件并强制 Unity WebGL 的 canvas 元素获取焦点,我们成功解决了 Unity 渲染在 Tab 切换时变黑的问题。这个方法简单有效,不依赖于浏览器的 focusvisibilitychange 事件,因此在 Tab 切换时能够稳定地恢复渲染。

如果你在开发过程中遇到类似问题,希望本篇博客能为你提供一些帮助和启发。如果有任何问题或其他解决方案,欢迎在评论区交流!

Read more

Claude Code + cc-switch 配置指南

本指南旨在引导初次接触的用户,一步步完成 Claude Code 命令行工具 (CLI) 和 cc-switch 的安装与配置。完成配置后,用户即可在代码编辑器的终端中,通过简单的命令,调用 Kimi、GPT-4 或其他主流 AI 模型,辅助完成代码编写、解释和调试等任务。 核心结论:Claude Code 与 cc-switch 结合使用,可以显著提升编程工作的效率。 目录 * 1. 准备工作:配置必需的 Node.js 环境 * 2. 第一步:安装 Claude Code 命令行工具 * 3. 第二步:安装 cc-switch 模型管理工具 * 4. 第三步:获取 AI 模型的

开源逆袭!Wan2.1让家用电脑也能跑AI视频生成

开源逆袭!Wan2.1让家用电脑也能跑AI视频生成

文章目录 * 前言 * 【视频教程】 * 1.软件准备 * 1.1 ComfyUI * 1.2 文本编码器 * 1.3 VAE * 1.4 视频生成模型 * 2.整合配置 * 3. 本地运行测试 * 4. 公网使用Wan2.1模型生成视频 * 4.1 创建远程连接公网地址 * 5. 固定远程访问公网地址 * 总结 前言 当商业AI视频模型还在按分钟计费时,Wan2.1开源模型已经实现了平民化突破!这款由国内团队开发的文生视频工具,在VBench榜单上多项指标超越同类闭源产品,尤其擅长生成自然场景和人物动作。最令人惊喜的是硬件门槛——普通家用N卡就能运行,8G显存即可生成720P视频,让独立创作者也能玩转AI视频创作。 作为测试了10+视频模型的创作者,Wan2.1给我的最大惊喜是"场景一致性"。生成"

$19.99 订阅值不值?Google AI Pro 全面评测以及订阅会员权益功能解析详情

$19.99 订阅值不值?Google AI Pro 全面评测以及订阅会员权益功能解析详情

从单一工具到代理生态:Google AI Pro 深度评测报告 写在前面:2025 年 11 月,这注定是 AI 发展史上的一个分水岭。当我们将目光聚焦在 Google 刚刚完成的消费者订阅服务重组时,会发现原来的 “Google One AI Premium” 已成历史,取而代之的是层级更分明、野心更大的 Google AI Pro 与 Google AI Ultra。 这不只是改个名字那么简单。这代表了 Google 战略重心的根本性位移:从卖“聊天机器人”的访问权,转向构建一个由“智能代理(Agents)”驱动的生产力生态。 本文将为你剥开营销术语的外衣,对 Google AI Pro($19.99/月)

全员开卷!DeepSeek V4 定档下周?阿里开源偷家 OpenClaw,Nano Banana 2 登顶!| AI Weekly 2.23-3.1

全员开卷!DeepSeek V4 定档下周?阿里开源偷家 OpenClaw,Nano Banana 2 登顶!| AI Weekly 2.23-3.1

📢 本周 AI 快讯 | 1 分钟速览🚀 1️⃣ 🔥 DeepSeek 下周发布 V4 :万亿参数原生多模态大模型,每 token 仅激活约 320 亿参数,上下文扩展至 100 万 token,与华为、寒武纪完成推理端深度适配。 2️⃣ ⚡ DeepSeek 联合北大清华发布 DualPath :专攻 Agent 多轮对话场景下的 KV-Cache 瓶颈,基于 DeepSeek V3.2 实测吞吐量最高提升 1.96 倍,仅约 5000 行代码改动。 3️⃣ 🐾 阿里开源桌面 Agent 工具 CoPaw :对标 OpenClaw 的国产平替方案,原生接入钉钉、