Skip to content

Browser Lifecycle

NeekoGta edited this page Jun 17, 2026 · 1 revision

Browser Lifecycle

A browser is owned per player and identified by a script-defined browserid.

Lifecycle states

not created
  -> create request sent
  -> created
  -> visible / hidden
  -> navigated / reloaded
  -> destroyed

Create

Overlay2D:

CEF_CreateBrowser(playerid, browserid, "http://cef/demo/index.html", false);

World2D:

CEF_CreateWorld2DBrowser(playerid, browserid, "http://cef/demo/world2d.html", x, y, z, 512.0, 256.0);

WorldObject3D:

CEF_CreateWorldBrowser(playerid, browserid, "http://cef/demo/world3d.html", "CJ_TV_SCREEN", 512.0, 256.0);
CEF_AttachBrowserToObject(playerid, browserid, objectid);

Creation callback

public OnCefBrowserCreated(playerid, browserid, bool:success, E_CEF_CREATE_STATUS:code, const reason[])
{
    printf("CEF browser created: player=%d browser=%d success=%d code=%d reason=%s", playerid, browserid, success, _:code, reason);
    return 1;
}

Hide / show

CEF_SetBrowserVisible(playerid, browserid, false);
CEF_SetBrowserVisible(playerid, browserid, true);

Use hide/show when the browser should remain alive and keep its JS state.

Reload

CEF_ReloadBrowser(playerid, browserid, true);

Use reload when the same URL should refresh.

Navigate

CEF_LoadUrl(playerid, browserid, "http://cef/demo/other.html");

Use CEF_LoadUrl when an existing browser should load a different page without destroying/recreating it.

Destroy

CEF_DestroyBrowser(playerid, browserid);

Destroy browsers that are no longer needed.

Recommended cleanup:

public OnPlayerDisconnect(playerid, reason)
{
    CEF_DestroyBrowser(playerid, 1000);
    CEF_DestroyBrowser(playerid, 2000);
    CEF_DestroyBrowser(playerid, 3000);
    return 1;
}

Browser ID rules

  • IDs are per player.
  • Reusing the same ID before the old browser is fully destroyed can fail.
  • Keep constants for important browsers.

Example:

#define CEF_BROWSER_LOGIN 1000
#define CEF_BROWSER_PHONE 1100
#define CEF_BROWSER_TV    3000

Destroy/recreate delay

When testing destroy/recreate, use a short timer:

CEF_DestroyBrowser(playerid, browserid);
SetTimerEx("RecreateBrowser", 500, false, "i", playerid);

If you see ID already in use, increase the delay.

Clone this wiki locally