You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity WebGL如何打开未聚焦新标签页?解决应用暂停问题

解决Unity WebGL打开未聚焦新标签页的问题

Unity的Application.OpenURL在WebGL环境中会强制让新标签页获取焦点,导致原应用所在标签失焦后被浏览器暂停——即使开启了"Run in background"设置也无效,因为该设置仅对原生平台生效,浏览器的标签页生命周期由自身规则控制。要实现打开新标签但不抢占焦点,需要通过JS互操作调用浏览器原生API:

步骤1:创建WebGL插件脚本

在Unity项目的Assets/Plugins/WebGL目录下新建一个.jslib文件(比如命名为UnfocusedTab.jslib),写入以下代码:

mergeInto(LibraryManager.library, {
    OpenUnfocusedTab: function(url) {
        // 转换Unity传入的UTF8字符串为JS字符串
        const jsUrl = Pointer_stringify(url);
        // 打开新标签,指定参数阻止聚焦
        const newTab = window.open(jsUrl, '_blank', 'noopener,noreferrer,focus=no');
        // 兼容部分浏览器:强制原窗口重新获取焦点
        if (newTab) {
            window.focus();
        }
    }
});

步骤2:在C#中调用JS方法

创建一个C#脚本(比如TabOpener.cs),导入JS方法并绑定到用户交互事件:

using UnityEngine;
using System.Runtime.InteropServices;

public class TabOpener : MonoBehaviour
{
    [DllImport("__Internal")]
    private static extern void OpenUnfocusedTab(string url);

    // 绑定到UI按钮的OnClick事件
    public void OpenTabWithoutFocus(string targetUrl)
    {
        #if UNITY_WEBGL && !UNITY_EDITOR
            OpenUnfocusedTab(targetUrl);
        #else
            // 编辑器下用默认方式打开
            Application.OpenURL(targetUrl);
        #endif
    }
}

关键注意事项

  • 浏览器安全限制:必须通过用户主动交互(比如按钮点击、键盘输入)触发调用,否则浏览器会拦截弹出窗口,无法自动在后台打开新标签。
  • 兼容性处理:部分浏览器对focus=no参数支持有限,代码中额外添加的window.focus()可以强制原窗口重新聚焦,是更可靠的兼容方案。
  • 安全参数:noopener,noreferrer必须添加,既可以避免安全风险,也能让新标签页与原窗口完全隔离,减少浏览器的聚焦行为干扰。

内容的提问来源于stack exchange,提问作者WolfPG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 15:46:02