Skip to main content
Version: bleeding-edge 🩸

🖥️ WebUI

Class for spawning a dynamic Web Browser.


💂Authority
This class can only be spawned on 🟧 Client side.
👪Inheritance
This class shares methods and events from Base Entity.
🧑‍💻API Source
This page is auto-generated! The Functions, Properties and Events described here are defined in our GitHub's API Repository! Feel free to commit suggestions and changes to the source .json API files!

tip

Our WebUI implementation is built using the last versions of Chromium Embedded Framework.

tip

To access the in-browser remote debugging head over to http://localhost:9222 when you are connected to a server.

Proprietary Codecs

Proprietary Codecs like MP3 and AAC are not supported on public CEF builds. We recommend converting your media files to WEBM or OGG.

🎒 Examples

Client/Index.lua
-- Loading a local file
local my_ui = WebUI(
"Awesome UI", -- Name
"file://UI/index.html", -- Path relative to this package (Client/)
WebUIVisibility.Visible -- Is Visible on Screen
)

-- Loading a Web URL
local my_browser = WebUI(
"Awesome Site", -- Name
"https://nanos.world", -- Web's URL
WebUIVisibility.Visible -- Is Visible on Screen
)

-- Loading a local file from other package
local my_ui = WebUI(
"Awesome Other UI", -- Name
"file://other-package/Client/UI/index.html",
WebUIVisibility.Visible -- Is Visible on Screen
)

Using a WebUI as Mesh Material

Client/Index.lua
-- Spawns a WebUI with is_visible = false, is_transparent = false, auto_resize = false and size of 500x500
local my_ui = WebUI("Awesome Site", "https://nanos.world", false, false, false, 500, 500)

-- Spawns a StaticMesh (can be any mesh)
local static_mesh = StaticMesh(Vector(0, 0, 100), Rotator(), "nanos-world::SM_Cube")

-- Sets the mesh material to use the WebUI
static_mesh:SetMaterialFromWebUI(my_ui)

Communicating between Lua and JS (WebUI)

Client/Index.lua
local my_ui = WebUI("Awesome UI", "file://UI/index.html")

local param1 = 123
local param2 = "hello"

-- Calls a JS event
my_ui:CallEvent("MyEvent", param1, param2)

-- Subscribes to receive JS events
my_ui:Subscribe("MyAnswer", function(param1)
Console.Log("Received back! %s", param1)
-- Will output 'Received back! Hey there!'
end)
script.js
// Register for "MyEvent" from Lua
Events.Subscribe("MyEvent", function(param1, param2) {
console.log("Triggered! " + param1 + " " + param2);
// Will output 'Triggered! 123 hello'

// Triggers "MyAnswer" on Lua
Events.Call("MyAnswer", "Hey there!");
});

// It is also possible to unsubscribe from an event to make it stop triggering
Events.Unsubscribe("MyEvent");

Pretty Scroll Bar

Since we migrated from Webkit to CEF, some scrollbars got ugly. Here's a small CSS snippet to make them almost like the Webkit ones:

::-webkit-scrollbar {
width: 6px;
}

::-webkit-scrollbar-thumb {
border-radius: 10px;
background-color: #494949;
}

body {
scrollbar-gutter: stable both-edges;
}

More related examples:

User Interfacecore-concepts/scripting/user-interface Basic HUD (HTML)getting-started/tutorials-and-examples/basic-hud-html
tip

You can use the output Texture from a Canvas with :SetMaterialFromWebUI() method!

📚 Libraries & Frameworks

Here a list of Community Created Libraries & Frameworks making use of WebUIs expanding it's possibilities:

🛠 Constructors

Default Constructor

local my_webui = WebUI(name, path, visibility?, is_transparent?, auto_resize?, width?, height?)
TypeNameDefaultDescription
stringname Required parameter Used for debugging logs
HTML Pathpath Required parameter Web URL or HTML File Path as file://my_file.html
WidgetVisibilityvisibilityWidgetVisibility.Visibleif WebUI is visible on screen
booleanis_transparenttrueif WebUI background is transparent
booleanauto_resizetrueif should auto resize when screen changes it's size (useful OFF when you are painting meshes with WebUI)
integerwidth0size of the WebUI width when you are not using auto_resize
integerheight0size of the WebUI height when you are not using auto_resize

🔍 HTML Path Searchers

Loading a .html file supports the following searchers, which are looked in the following order:

  1. Relative to current-file-path/
  2. Relative to current-package/Client/
  3. Relative to current-package/
  4. Relative to Packages/

🗿 Static Functions

Inherited Entity Static Functions
WebUI inherits from Base Entity Class, sharing it's methods and functions:
Base Entityscripting-reference/classes/base-classes/Entity
ReturnsNameDescription
table of Base EntityGetAllReturns a table containing all Entities of the class this is called on
Base EntityGetByIndexReturns a specific Entity of this class at an index
integerGetCountReturns how many Entities of this class exist
table of tableGetInheritedClassesGets a list of all directly inherited classes from this Class created with the Inheriting System
iteratorGetPairsReturns an iterator with all Entities of this class to be used with pairs()
table or nilGetParentClassGets the parent class if this Class was created with the Inheriting System
tableInheritInherits this class with the Inheriting System
booleanIsChildOfGets if this Class is child of another class if this Class was created with the Inheriting System
functionSubscribeSubscribes to an Event for all entities of this Class
functionSubscribeRemoteSubscribes to a custom event called from server
UnsubscribeUnsubscribes all callbacks from this Event in this Class within this Package, or only the callback passed
This class doesn't have own static functions.

🦠 Functions

Inherited Entity Functions
WebUI inherits from Base Entity Class, sharing it's methods and functions:
Base Entityscripting-reference/classes/base-classes/Entity
ReturnsNameDescription
BroadcastRemoteEventCalls a custom remote event directly on this entity to all Players
CallRemoteEventCalls a custom remote event directly on this entity to a specific Player
CallRemoteEventCalls a custom remote event directly on this entity
DestroyDestroys this Entity
table of stringGetAllValuesKeysGets a list of all values keys
tableGetClassGets the class of this entity
integerGetIDGets the universal network ID of this Entity (same on both client and server)
anyGetValueGets a Value stored on this Entity at the given key
booleanIsARecursively checks if this entity is inherited from a Class
booleanIsValidReturns true if this Entity is valid (i.e. wasn't destroyed and points to a valid Entity)
SetValueSets a Value in this Entity
functionSubscribeSubscribes to an Event on this specific entity
functionSubscribeRemoteSubscribes to a custom event called from server on this specific entity
UnsubscribeUnsubscribes all callbacks from this Event in this Entity within this Package, or only the callback passed
ReturnsNameDescription
BringToFrontPuts this WebUI in the front of all WebUIs and Widgets
CallEventCalls an Event on the Browser's JavaScript
ExecuteJavaScriptExecutes a JavaScript code in the Browser
stringGetNameGets this WebUI name
Vector2DGetSizeGets the current size of this WebUI
WidgetVisibilityGetVisibilityReturns the current WebUI visibility
booleanIsFrozenReturns if this WebUI is currently frozen
LoadHTMLLoads a pure HTML in this Browser
LoadURLLoads a new File/URL in this Browser
RemoveFocusRemoves the focus from this WebUI (and sets it back to game viewport)
SendKeyEventSends a Key Event into the WebUI programatically
SendMouseClickEventSends a Mouse Click into the WebUI programatically
SendMouseMoveEventSends a Mouse Move Event into the WebUI programatically
SendMouseWheelEventSends a Mouse Event into the WebUI programatically
SetFocusEnables the focus on this browser (i.e. can receive Keyboard input and will trigger input events)
SetFreezeFreezes the WebUI Rendering to the surface (it will still execute the JS under the hood)
SetLayoutSets the Layout as Canvas on Screen
SetVisibilitySets the visibility in screen
SoundSpawnSoundSpawns a Sound entity to plays this WebUI sound

BringToFront

Puts this WebUI in the front of all WebUIs and Widgets

my_webui:BringToFront()

CallEvent

Calls an Event on the Browser's JavaScript

my_webui:CallEvent(event_name, args...)
TypeParameterDefaultDescription
stringevent_name Required parameter The Event Name to trigger the event
anyargs... Required parameter Arguments to pass to the event

ExecuteJavaScript

Executes a JavaScript code in the Browser
Note: This method is experimental and should be used cautiously. Events are still the preferred way of communicating between Packages and WebUI.

my_webui:ExecuteJavaScript(javascript_code)
TypeParameterDefaultDescription
stringjavascript_code Required parameter No description provided

GetName

Gets this WebUI name

— Returns string.

local ret = my_webui:GetName()

GetSize

Gets the current size of this WebUI

— Returns Vector2D.

local ret = my_webui:GetSize()

GetVisibility

Returns the current WebUI visibility

— Returns WidgetVisibility.

local ret = my_webui:GetVisibility()

See also SetVisibility.


IsFrozen

Returns if this WebUI is currently frozen

— Returns boolean.

local ret = my_webui:IsFrozen()

LoadHTML

Loads a pure HTML in this Browser

my_webui:LoadHTML(html)
TypeParameterDefaultDescription
stringhtml Required parameter No description provided

LoadURL

Loads a new File/URL in this Browser

my_webui:LoadURL(url)
TypeParameterDefaultDescription
HTML Pathurl Required parameter No description provided

RemoveFocus

Removes the focus from this WebUI (and sets it back to game viewport)
You MUST call this after you don't need keyboard input anymore

my_webui:RemoveFocus()

SendKeyEvent

Sends a Key Event into the WebUI programatically

my_webui:SendKeyEvent(key_type, key_code, modifiers?)
TypeParameterDefaultDescription
WebUIKeyTypekey_type Required parameter No description provided
integerkey_code Required parameter No description provided
WebUIModifiermodifiers?WebUIModifier.NoneSupports several modifiers separating by | (using bit-wise operations)

SendMouseClickEvent

You must send both Down and Up to make it work properly

my_webui:SendMouseClickEvent(mouse_x, mouse_y, mouse_type, is_mouse_up, modifiers?, click_count?)
TypeParameterDefaultDescription
integermouse_x Required parameter Position X of the mouse
integermouse_y Required parameter Position Y of the mouse
WebUIMouseTypemouse_type Required parameter Which mouse button
booleanis_mouse_up Required parameter Whether the event was up or down
WebUIModifiermodifiers?WebUIModifier.NoneSupports several modifiers separating by | (using bit-wise operations)
integerclick_count?1Use 2 for double click event

SendMouseMoveEvent

Sends a Mouse Move Event into the WebUI programatically

my_webui:SendMouseMoveEvent(mouse_x, mouse_y, modifiers?, mouse_leave?)
TypeParameterDefaultDescription
integermouse_x Required parameter Position X of the mouse
integermouse_y Required parameter Position Y of the mouse
WebUIModifiermodifiers?WebUIModifier.NoneSupports several modifiers separating by | (using bit-wise operations)
booleanmouse_leave?falseNo description provided

SendMouseWheelEvent

Sends a Mouse Event into the WebUI programatically

my_webui:SendMouseWheelEvent(mouse_x, mouse_y, delta_x, delta_y)
TypeParameterDefaultDescription
integermouse_x Required parameter Position X of the mouse
integermouse_y Required parameter Position Y of the mouse
floatdelta_x Required parameter No description provided
floatdelta_y Required parameter No description provided

SetFocus

Enables the focus on this browser (i.e. can receive Keyboard input and will trigger input events
Note: Only one browser can have focus per time.

my_webui:SetFocus()

SetFreeze

Freezes the WebUI Rendering to the surface (it will still execute the JS under the hood)

my_webui:SetFreeze(freeze)
TypeParameterDefaultDescription
booleanfreeze Required parameter No description provided

SetLayout

Sets the Layout as Canvas on Screen. Anchors:

my_webui:SetLayout(screen_location/offset_left_top?, size/offset_right_bottom?, anchors_min?, anchors_max?, alignment?)
TypeParameterDefaultDescription
Vector2Dscreen_location/offset_left_top?Vector(0, 0)No description provided
Vector2Dsize/offset_right_bottom?Vector(0, 0)No description provided
Vector2Danchors_min?Vector(0, 0)No description provided
Vector2Danchors_max?Vector(1, 1)No description provided
Vector2Dalignment?Vector(0.5, 0.5)No description provided

SetVisibility

Sets the visibility in screen

my_webui:SetVisibility(visibility)
TypeParameterDefaultDescription
WidgetVisibilityvisibility Required parameter No description provided

See also GetVisibility.


SpawnSound

Spawns a Sound entity to plays this WebUI sound

— Returns Sound.

local ret = my_webui:SpawnSound(location?, is_2d?, volume?, inner_radius?, falloff_distance?, attenuation_function?)
TypeParameterDefaultDescription
Vectorlocation?Vector(0, 0, 0)No description provided
booleanis_2d?trueNo description provided
floatvolume?1.0No description provided
integerinner_radius?400No description provided
integerfalloff_distance?3600No description provided
AttenuationFunctionattenuation_function?AttenuationFunction.LinearNo description provided

🚀 Events

Inherited Entity Events
WebUI inherits from Base Entity Class, sharing it's events:
Base Entityscripting-reference/classes/base-classes/Entity
NameDescription
ClassRegisterTriggered when a new Class is registered with the Inheriting System
DestroyTriggered when an Entity is destroyed
SpawnTriggered when an Entity is spawned/created
ValueChangeTriggered when an Entity has a value changed with :SetValue()
NameDescription
FailTriggered when this page fails to load
ReadyTriggered when this page is fully loaded

Fail

Triggered when this page fails to load
WebUI.Subscribe("Fail", function(error_code, message)
-- Fail was called
end)
TypeArgumentDescription
integererror_codeNo description provided
stringmessageNo description provided

Ready

Triggered when this page is fully loaded
WebUI.Subscribe("Ready", function()
-- Ready was called
end)