Unity WebGL (Mobile Phantom Browser) – How to Open Twitter/Telegram Links in a New Tab from Game

I have a Unity WebGL game that is Solana-based and runs inside the Phantom browser on mobile. I want to add two links (Twitter and Telegram) that open in a new tab when the player presses a button in the game. I tried using a .jslib file to implement this, but it's not working.
Can you please help me with this?
Answer
✅ Step 1: Create the .jslib
file
Create a file named, for example, OpenLink.jslib
inside the Assets/Plugins/WebGL
folder of your Unity project. Inside, add the following code:
js
CopiarEditar
mergeInto(LibraryManager.library, { OpenExternalLink: function (urlPtr) { var url = UTF8ToString(urlPtr); var newWindow = window.open(url, '_blank'); if (newWindow) { newWindow.focus(); } else { console.log("Could not open the window. Possibly blocked by the browser?"); } } });
This script opens the URL in a new tab. On mobile browsers (and embedded browsers like Phantom wallet), window.open()
may be blocked if not triggered directly by a user action (e.g., a button click).
✅ Step 2: Create a C# wrapper in Unity
Create a C# script (e.g., ExternalLink.cs
) and place it inside Assets/Scripts/
:
csharp
CopiarEditar
usingSystem.Runtime.InteropServices; using UnityEngine; public class ExternalLink : MonoBehaviour { [DllImport("__Internal")] private static extern void OpenExternalLink(string url); public void OpenTwitter() { #if UNITY_WEBGL && !UNITY_EDITOR OpenExternalLink("https://twitter.com/YOUR_USERNAME"); #else Application.OpenURL("https://twitter.com/YOUR_USERNAME"); #endif } public void OpenTelegram() { #if UNITY_WEBGL && !UNITY_EDITOR OpenExternalLink("https://t.me/YOUR_CHANNEL"); #else Application.OpenURL("https://t.me/YOUR_CHANNEL"); #endif } }
✅ Step 3: Connect the script to a button
Create a button in your Unity scene.
Attach the
ExternalLink.cs
script to a GameObject in the scene (e.g., an empty object namedLinkManager
).In the button’s OnClick() panel, drag the GameObject that holds the script and select
ExternalLink -> OpenTwitter()
orOpenTelegram()
based on the desired button.
⚠️ Important Notes for Phantom and Mobile Browsers
The link must be triggered directly by a user interaction (click/tap). If the method is called via code without direct user interaction,
window.open
will be blocked.Some mobile wallets (like Phantom) open dApps in a custom webview browser. In those cases, the link might not open in a new tab, but rather redirect the same view. There’s no universal workaround, but you can try forcing
_system
viawindow.open(url, '_system')
, although this is not standard and may not work across all platforms.