Module emscripten

emscripten API.

Description

The functions in this module broadly reflect emscripten’s API and obviously are only implemented for the emscripten platform.

See Emscripten’s API documentation for more information about these APIs.

The counterpart of functions defined in this module are two main Javascript functions that can be used to send messages to Erlang.

  Module.cast('some_proc', 'message')
  await Module.call('some_proc', 'message')

These respectively send the following messages to Erlang process registered as some_proc:

  {emscripten, {cast, <<"message">>}}
  {emscripten, {call, Promise, <<"message">>}}

Promise should be passed to promise_resolve/1,2 or promise_reject/1,2 as documented below.

JavaScript values can also be tracked: run_script_tracked/1 evaluates a script on the main thread and returns opaque handles to the values it evaluates to, keeping those JavaScript values alive until the handles are garbage collected by the Erlang VM. get_tracked/2 maps handles back to their keys or current values.

Data Types

focus_event()


focus_event() = #{node_name => unicode:unicode_binary(), id => unicode:unicode_binary()}

get_tracked_result()


get_tracked_result() = {ok, binary()} | {error, badkey} | {error, badvalue}

html5_target()


html5_target() = window | document | screen | iodata()

keyboard_event()


keyboard_event() = #{timestamp => float(), location => integer(), ctrl_key => boolean(), shift_key => boolean(), alt_key => boolean(), meta_key => boolean(), repeat => boolean(), char_code => integer(), key_code => integer(), which => integer(), key => unicode:unicode_binary(), code => unicode:unicode_binary(), char_value => unicode:unicode_binary(), locale => unicode:unicode_binary()}

listener_handle()

abstract datatype: listener_handle()

mouse_event()


mouse_event() = #{timestamp => float(), screen_x => integer(), screen_y => integer(), client_x => integer(), client_y => integer(), ctrl_key => boolean(), shift_key => boolean(), alt_key => boolean(), meta_key => boolean(), button => integer(), buttons => integer(), movement_x => integer(), movement_y => integer(), target_x => integer(), target_y => integer(), padding => integer()}

promise()

abstract datatype: promise()

register_error_reason()


register_error_reason() = not_supported | failed_not_deferred | invalid_target | unknown_target | failed | no_data | timed_out | integer()

register_option()


register_option() = {use_capture, boolean()} | {prevent_default, boolean()}

register_options()


register_options() = boolean() | [register_option()]

register_result()


register_result() = {ok, listener_handle()} | {ok, listener_handle(), deferred} | {error, register_error_reason()}

run_script_opt()


run_script_opt() = main_thread | async

touch_event()


touch_event() = #{timestamp => float(), ctrl_key => boolean(), shift_key => boolean(), alt_key => boolean(), meta_key => boolean(), touches => [touch_point()]}

touch_point()


touch_point() = #{identifier => integer(), screen_x => integer(), screen_y => integer(), client_x => integer(), client_y => integer(), page_x => integer(), page_y => integer(), is_changed => boolean(), on_target => boolean(), target_x => integer(), target_y => integer()}

tracked_object()

abstract datatype: tracked_object()

ui_event()


ui_event() = #{detail => integer(), document_body_client_width => integer(), document_body_client_height => integer(), window_inner_width => integer(), window_inner_height => integer(), window_outer_width => integer(), window_outer_height => integer(), scroll_top => integer(), scroll_left => integer()}

wheel_event()


wheel_event() = #{timestamp => float(), screen_x => integer(), screen_y => integer(), client_x => integer(), client_y => integer(), ctrl_key => boolean(), shift_key => boolean(), alt_key => boolean(), meta_key => boolean(), button => integer(), buttons => integer(), movement_x => integer(), movement_y => integer(), target_x => integer(), target_y => integer(), padding => integer(), delta_x => integer(), delta_y => integer(), delta_z => integer(), delta_mode => integer()}

Function Index

get_tracked/2Get the keys or the current values of tracked objects.
promise_reject/1Equivalent to promise_reject(_Promise, 0).
promise_reject/2Reject a promise with a given result.
promise_resolve/1Equivalent to promise_resolve(_Promise, 0).
promise_resolve/2Successfully resolve a promise with a given result.
register_blur_callback/1Equivalent to register_blur_callback(_Target, []).
register_blur_callback/2Register for blur events.
register_blur_callback/3Register for blur events.
register_click_callback/1Equivalent to register_click_callback(_Target, []).
register_click_callback/2Register for click events.
register_click_callback/3Register for click events.
register_dblclick_callback/1Equivalent to register_dblclick_callback(_Target, []).
register_dblclick_callback/2Register for dblclick events.
register_dblclick_callback/3Register for dblclick events.
register_focus_callback/1Equivalent to register_focus_callback(_Target, []).
register_focus_callback/2Register for focus events.
register_focus_callback/3Register for focus events.
register_focusin_callback/1Equivalent to register_focusin_callback(_Target, []).
register_focusin_callback/2Register for focusin events.
register_focusin_callback/3Register for focusin events.
register_focusout_callback/1Equivalent to register_focusout_callback(_Target, []).
register_focusout_callback/2Register for focusout events.
register_focusout_callback/3Register for focusout events.
register_keydown_callback/1Equivalent to register_keydown_callback(_Target, []).
register_keydown_callback/2Register for keydown events.
register_keydown_callback/3Register for keydown events.
register_keypress_callback/1Equivalent to register_keypress_callback(_Target, []).
register_keypress_callback/2Register for keypress events.
register_keypress_callback/3Register for keypress events.
register_keyup_callback/1Equivalent to register_keyup_callback(_Target, []).
register_keyup_callback/2Register for keyup events.
register_keyup_callback/3Register for keyup events.
register_mousedown_callback/1Equivalent to register_mousedown_callback(_Target, []).
register_mousedown_callback/2Register for mousedown events.
register_mousedown_callback/3Register for mousedown events.
register_mouseenter_callback/1Equivalent to register_mouseenter_callback(_Target, []).
register_mouseenter_callback/2Register for mouseenter events.
register_mouseenter_callback/3Register for mouseenter events.
register_mouseleave_callback/1Equivalent to register_mouseleave_callback(_Target, []).
register_mouseleave_callback/2Register for mouseleave events.
register_mouseleave_callback/3Register for mouseleave events.
register_mousemove_callback/1Equivalent to register_mousemove_callback(_Target, []).
register_mousemove_callback/2Register for mousemove events.
register_mousemove_callback/3Register for mousemove events.
register_mouseout_callback/1Equivalent to register_mouseout_callback(_Target, []).
register_mouseout_callback/2Register for mouseout events.
register_mouseout_callback/3Register for mouseout events.
register_mouseover_callback/1Equivalent to register_mouseover_callback(_Target, []).
register_mouseover_callback/2Register for mouseover events.
register_mouseover_callback/3Register for mouseover events.
register_mouseup_callback/1Equivalent to register_mouseup_callback(_Target, []).
register_mouseup_callback/2Register for mouseup events.
register_mouseup_callback/3Register for mouseup events.
register_resize_callback/1Equivalent to register_resize_callback(_Target, []).
register_resize_callback/2Register for resize events.
register_resize_callback/3Register for resize events.
register_scroll_callback/1Equivalent to register_scroll_callback(_Target, []).
register_scroll_callback/2Register for scroll events.
register_scroll_callback/3Register for scroll events.
register_touchcancel_callback/1Equivalent to register_touchcancel_callback(_Target, []).
register_touchcancel_callback/2Register for touchcancel events.
register_touchcancel_callback/3Register for touchcancel events.
register_touchend_callback/1Equivalent to register_touchend_callback(_Target, []).
register_touchend_callback/2Register for touchend events.
register_touchend_callback/3Register for touchend events.
register_touchmove_callback/1Equivalent to register_touchmove_callback(_Target, []).
register_touchmove_callback/2Register for touchmove events.
register_touchmove_callback/3Register for touchmove events.
register_touchstart_callback/1Equivalent to register_touchstart_callback(_Target, []).
register_touchstart_callback/2Register for touchstart events.
register_touchstart_callback/3Register for touchstart events.
register_wheel_callback/1Equivalent to register_wheel_callback(_Target, []).
register_wheel_callback/2Register for wheel events.
register_wheel_callback/3Register for wheel events.
run_script/1Equivalent to run_script(_Script, []).
run_script/2Run a script.
run_script_tracked/1Run a script and track the JavaScript values it evaluates to.
unregister_blur_callback/1Unregister a blur event handler.
unregister_click_callback/1Unregister a click event handler.
unregister_dblclick_callback/1Unregister a dblclick event handler.
unregister_focus_callback/1Unregister a focus event handler.
unregister_focusin_callback/1Unregister a focusin event handler.
unregister_focusout_callback/1Unregister a focusout event handler.
unregister_keydown_callback/1Unregister a keydown event handler.
unregister_keypress_callback/1Unregister a keypress listener.
unregister_keyup_callback/1Unregister a keyup event handler.
unregister_mousedown_callback/1Unregister a mousedown event handler.
unregister_mouseenter_callback/1Unregister a mouseenter event handler.
unregister_mouseleave_callback/1Unregister a mouseleave event handler.
unregister_mousemove_callback/1Unregister a mousemove event handler.
unregister_mouseout_callback/1Unregister a mouseout event handler.
unregister_mouseover_callback/1Unregister a mouseover event handler.
unregister_mouseup_callback/1Unregister a mouseup event handler.
unregister_resize_callback/1Unregister a resize event handler.
unregister_scroll_callback/1Unregister a scroll event handler.
unregister_touchcancel_callback/1Unregister a touchcancel event handler.
unregister_touchend_callback/1Unregister a touchend event handler.
unregister_touchmove_callback/1Unregister a touchmove event handler.
unregister_touchstart_callback/1Unregister a touchstart event handler.
unregister_wheel_callback/1Unregister a wheel event handler.

Function Details

get_tracked/2


get_tracked(_TrackedObjects::[tracked_object()], Type::key) -> [non_neg_integer()]

_TrackedObjects: Proper list of tracked object handles


get_tracked(_TrackedObjects::[tracked_object()], Type::value) -> [get_tracked_result()]

_TrackedObjects: Proper list of tracked object handles

returns: A list of integer keys, or a list of {ok, Value} / {error, badkey} / {error, badvalue} tuples

Get the keys or the current values of tracked objects.

With key, returns the integer key of each handle, in the same order as the input list. Keys identify entries of Module.trackedObjectsMap and are only meaningful inside the current VM instance. This call does not involve the main thread.

With value, fetches the current JavaScript value of each handle by calling the Module.onGetTrackedObjects hook on the main thread; the caller waits for completion. Values must be JavaScript strings: the default hook returns the stored values unchanged, so only string values can be fetched. Embedders typically serialize values to JSON, either in the tracked script itself or in an overridden hook. Each element of the result is {ok, Binary} with the UTF-8 bytes of the string, {error, badvalue} if the stored value is not a string, or {error, badkey} if the key is not (or no longer) in the map (with the default hooks a stored undefined value is indistinguishable from a missing key). Results are in the same order as the input list.

An empty list yields an empty list, on either type, so the {ok, []} of a run_script_tracked/1 call that tracked nothing can be passed on unguarded. With value this answers without reaching the main thread.

Raises badarg if the first argument is not a proper list of tracked objects, or if the second argument is neither key nor value, and out_of_memory if the VM runs out of memory while building the result, on either side of the JavaScript boundary.

With value, a Module.onGetTrackedObjects hook that violates its contract (throws, or does not return one entry per requested key) tells the VM nothing about any single key, so every element of the result is {error, badvalue}.

promise_reject/1


promise_reject(Promise::promise()) -> ok

Equivalent to promise_reject(_Promise, 0).

promise_reject/2


promise_reject(_Promise::promise(), _Value::integer() | iodata()) -> ok

_Promise: Opaque promise resource
_Value: Value to send to Javascript, must be an integer or a string.

Reject a promise with a given result. This is similar to promise_resolve except the promise is rejected.

promise_resolve/1


promise_resolve(Promise::promise()) -> ok

Equivalent to promise_resolve(_Promise, 0).

promise_resolve/2


promise_resolve(_Promise::promise(), _Value::integer() | iodata()) -> ok

_Promise: Opaque promise resource
_Value: Value to send to Javascript, must be an integer or a string.

Successfully resolve a promise with a given result. A promise is currently only obtained through synchronous calls using Module.call() javascript function. If Javascript calls:

  await Module.call('some_proc', 'message')

and if an Erlang process is registered as some_proc, then the process will receive a message:


{emscripten, {call, Promise, <<"message">>}}

and the Javascript caller will wait until promise_resolve or promise_reject is called. If the process doesn’t exist, the promise will be rejected with ‘no_proc’. Likewise if the Promise is garbage collected by the Erlang VM.

register_blur_callback/1


register_blur_callback(Target::html5_target()) -> register_result()

Equivalent to register_blur_callback(_Target, []).

register_blur_callback/2


register_blur_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for blur events. Events are sent as:

  {emscripten, {blur, focus_event()}}

See also: register_keypress_callback/2.

register_blur_callback/3


register_blur_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for blur events. Events are sent as:

  {emscripten, {blur, focus_event()}, UserData}

See also: register_keypress_callback/2.

register_click_callback/1


register_click_callback(Target::html5_target()) -> register_result()

Equivalent to register_click_callback(_Target, []).

register_click_callback/2


register_click_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for click events. Events are sent as:

  {emscripten, {click, mouse_event()}}

See also: register_keypress_callback/2.

register_click_callback/3


register_click_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for click events. Events are sent as:

  {emscripten, {click, mouse_event()}, UserData}

See also: register_keypress_callback/2.

register_dblclick_callback/1


register_dblclick_callback(Target::html5_target()) -> register_result()

Equivalent to register_dblclick_callback(_Target, []).

register_dblclick_callback/2


register_dblclick_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for dblclick events.

See also: register_click_callback/2.

register_dblclick_callback/3


register_dblclick_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for dblclick events.

See also: register_click_callback/2.

register_focus_callback/1


register_focus_callback(Target::html5_target()) -> register_result()

Equivalent to register_focus_callback(_Target, []).

register_focus_callback/2


register_focus_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for focus events.

See also: register_blur_callback/2.

register_focus_callback/3


register_focus_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for focus events.

See also: register_blur_callback/2.

register_focusin_callback/1


register_focusin_callback(Target::html5_target()) -> register_result()

Equivalent to register_focusin_callback(_Target, []).

register_focusin_callback/2


register_focusin_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for focusin events.

See also: register_blur_callback/2.

register_focusin_callback/3


register_focusin_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for focusin events.

See also: register_blur_callback/2.

register_focusout_callback/1


register_focusout_callback(Target::html5_target()) -> register_result()

Equivalent to register_focusout_callback(_Target, []).

register_focusout_callback/2


register_focusout_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for focusout events.

See also: register_blur_callback/2.

register_focusout_callback/3


register_focusout_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for focusout events.

See also: register_blur_callback/2.

register_keydown_callback/1


register_keydown_callback(Target::html5_target()) -> register_result()

Equivalent to register_keydown_callback(_Target, []).

register_keydown_callback/2


register_keydown_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for keydown events.

See also: register_keypress_callback/2.

register_keydown_callback/3


register_keydown_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for keydown events.

See also: register_keypress_callback/2.

register_keypress_callback/1


register_keypress_callback(Target::html5_target()) -> register_result()

Equivalent to register_keypress_callback(_Target, []).

register_keypress_callback/2


register_keypress_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for keypress events. This function registers with no user data and events are sent as:

  {emscripten, {keypress, keyboard_event()}}

See also: register_keypress_callback/3.

register_keypress_callback/3


register_keypress_callback(_Target::html5_target(), _Options::register_options(), _UserData::any()) -> register_result()

_Target: target to register keypress on
_Options: options for event handling
_UserData: user data passed back

Register for keypress events. This function registers keypress events on a given target. Target can be specified as special atoms window for Javascript’s window, document for window.document. screen is also supported, but it doesn’t seem to work, see https://github.com/emscripten-core/emscripten/issues/19865

Second parameter specifies options which can be a boolean() to match useCapture in Emscripten’s API. Alternatively, the option can be a proplist() with use_capture and prevent_default keys. prevent_default determines what the handler should return to Javascript, true meaning that the default should be prevented.

Third parameter is user data that is passed back. Indeed, when an event occurs, the following message is sent to the process that registered the event:

  {emscripten, {keypress, keyboard_event()}, UserData}

The function eventually returns a listener_handle() or an error. The handler is an opaque resource that actually contains a copy of UserData. Please note that if the calling process dies, the callback and any callback for the same event on the same target are unregistered.

register_keyup_callback/1


register_keyup_callback(Target::html5_target()) -> register_result()

Equivalent to register_keyup_callback(_Target, []).

register_keyup_callback/2


register_keyup_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for keyup events.

See also: register_keypress_callback/2.

register_keyup_callback/3


register_keyup_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for keyup events.

See also: register_keypress_callback/2.

register_mousedown_callback/1


register_mousedown_callback(Target::html5_target()) -> register_result()

Equivalent to register_mousedown_callback(_Target, []).

register_mousedown_callback/2


register_mousedown_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for mousedown events.

See also: register_click_callback/2.

register_mousedown_callback/3


register_mousedown_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for mousedown events.

See also: register_click_callback/2.

register_mouseenter_callback/1


register_mouseenter_callback(Target::html5_target()) -> register_result()

Equivalent to register_mouseenter_callback(_Target, []).

register_mouseenter_callback/2


register_mouseenter_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for mouseenter events.

See also: register_click_callback/2.

register_mouseenter_callback/3


register_mouseenter_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for mouseenter events.

See also: register_click_callback/2.

register_mouseleave_callback/1


register_mouseleave_callback(Target::html5_target()) -> register_result()

Equivalent to register_mouseleave_callback(_Target, []).

register_mouseleave_callback/2


register_mouseleave_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for mouseleave events.

See also: register_click_callback/2.

register_mouseleave_callback/3


register_mouseleave_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for mouseleave events.

See also: register_click_callback/2.

register_mousemove_callback/1


register_mousemove_callback(Target::html5_target()) -> register_result()

Equivalent to register_mousemove_callback(_Target, []).

register_mousemove_callback/2


register_mousemove_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for mousemove events.

See also: register_click_callback/2.

register_mousemove_callback/3


register_mousemove_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for mousemove events.

See also: register_click_callback/2.

register_mouseout_callback/1


register_mouseout_callback(Target::html5_target()) -> register_result()

Equivalent to register_mouseout_callback(_Target, []).

register_mouseout_callback/2


register_mouseout_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for mouseout events.

See also: register_click_callback/2.

register_mouseout_callback/3


register_mouseout_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for mouseout events.

See also: register_click_callback/2.

register_mouseover_callback/1


register_mouseover_callback(Target::html5_target()) -> register_result()

Equivalent to register_mouseover_callback(_Target, []).

register_mouseover_callback/2


register_mouseover_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for mouseover events.

See also: register_click_callback/2.

register_mouseover_callback/3


register_mouseover_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for mouseover events.

See also: register_click_callback/2.

register_mouseup_callback/1


register_mouseup_callback(Target::html5_target()) -> register_result()

Equivalent to register_mouseup_callback(_Target, []).

register_mouseup_callback/2


register_mouseup_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for mouseup events.

See also: register_click_callback/2.

register_mouseup_callback/3


register_mouseup_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for mouseup events.

See also: register_click_callback/2.

register_resize_callback/1


register_resize_callback(Target::html5_target()) -> register_result()

Equivalent to register_resize_callback(_Target, []).

register_resize_callback/2


register_resize_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for resize events. Events are sent as:

  {emscripten, {resize, ui_event()}}

See also: register_keypress_callback/2.

register_resize_callback/3


register_resize_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for resize events. Events are sent as:

  {emscripten, {resize, ui_event()}, UserData}

See also: register_keypress_callback/2.

register_scroll_callback/1


register_scroll_callback(Target::html5_target()) -> register_result()

Equivalent to register_scroll_callback(_Target, []).

register_scroll_callback/2


register_scroll_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for scroll events.

See also: register_resize_callback/2.

register_scroll_callback/3


register_scroll_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for scroll events.

See also: register_resize_callback/2.

register_touchcancel_callback/1


register_touchcancel_callback(Target::html5_target()) -> register_result()

Equivalent to register_touchcancel_callback(_Target, []).

register_touchcancel_callback/2


register_touchcancel_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for touchcancel events.

See also: register_touchstart_callback/2.

register_touchcancel_callback/3


register_touchcancel_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for touchcancel events.

See also: register_touchstart_callback/2.

register_touchend_callback/1


register_touchend_callback(Target::html5_target()) -> register_result()

Equivalent to register_touchend_callback(_Target, []).

register_touchend_callback/2


register_touchend_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for touchend events.

See also: register_touchstart_callback/2.

register_touchend_callback/3


register_touchend_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for touchend events.

See also: register_touchstart_callback/2.

register_touchmove_callback/1


register_touchmove_callback(Target::html5_target()) -> register_result()

Equivalent to register_touchmove_callback(_Target, []).

register_touchmove_callback/2


register_touchmove_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for touchmove events.

See also: register_touchstart_callback/2.

register_touchmove_callback/3


register_touchmove_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for touchmove events.

See also: register_touchstart_callback/2.

register_touchstart_callback/1


register_touchstart_callback(Target::html5_target()) -> register_result()

Equivalent to register_touchstart_callback(_Target, []).

register_touchstart_callback/2


register_touchstart_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for touchstart events. Events are sent as:

  {emscripten, {touchstart, touch_event()}}

See also: register_keypress_callback/2.

register_touchstart_callback/3


register_touchstart_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for touchstart events. Events are sent as:

  {emscripten, {touchstart, touch_event()}, UserData}

See also: register_keypress_callback/2.

register_wheel_callback/1


register_wheel_callback(Target::html5_target()) -> register_result()

Equivalent to register_wheel_callback(_Target, []).

register_wheel_callback/2


register_wheel_callback(Target::html5_target(), Options::register_options()) -> register_result()

Register for wheel events. Events are sent as:

  {emscripten, {wheel, wheel_event()}}

See also: register_keypress_callback/2.

register_wheel_callback/3


register_wheel_callback(Target::html5_target(), Options::register_options(), UserData::any()) -> register_result()

Register for wheel events. Events are sent as:

  {emscripten, {wheel, mouse_event()}, UserData}

See also: register_keypress_callback/2.

run_script/1


run_script(Script::iodata()) -> ok

Equivalent to run_script(_Script, []).

run_script/2


run_script(_Script::iodata(), _Options::[run_script_opt()]) -> ok

_Script: Script to run
_Options: List of options. If main_thread is specified, the script is run on the main thread. If async, the script is run asynchronously, i.e. the caller does not wait for completion. Only applies if main_thread is specified.

returns: ok

Run a script. By default, the script is run in the current worker thread, which arguably may not be very useful. Please note that exception handling is disabled, so the script should not throw and should compile, otherwise this will crash the VM.

run_script_tracked/1


run_script_tracked(_Script::iodata()) -> {ok, [tracked_object()]} | {error, badarg}

_Script: Script to run, as iodata

returns: {ok, TrackedObjects} or {error, badarg}

Run a script and track the JavaScript values it evaluates to.

The script is always run on the main thread and the caller waits for completion.

The script is evaluated by the Module.onRunTrackedJs JavaScript hook. The default hook evaluates the script with an indirect eval and expects it to evaluate to a JavaScript array. Each element of the array is stored in Module.trackedObjectsMap under a fresh integer key, and the function returns {ok, TrackedObjects} with one opaque handle per element, in the same order.

The JavaScript values are kept alive as long as the returned handles are alive on the Erlang side: when a handle is garbage collected, the Module.onTrackedObjectDelete hook is eventually called with the corresponding key on the main thread, and the default hook then drops the value from Module.trackedObjectsMap. This ties the lifetime of otherwise non-serializable JavaScript values (such as DOM nodes) to Erlang terms.

With the default hook, a script that evaluates to null or undefined yields {ok, []}; a script that throws or evaluates to anything else yields {error, badarg}.

The script is a sequence of bytes, not text: it must be UTF-8 encoded and free of NUL bytes. A binary is passed through unchanged, so a NUL in it truncates the script there, while a character list is written one byte per element, so an element above 255 raises badarg and one in the 128 to 255 range becomes a single byte that JavaScript decodes as U+FFFD rather than the character it stood for.

Embedders may override the hooks on the resolved emscripten module instance, after the module factory promise resolves (hooks passed in the factory configuration are overwritten by the defaults). The overrides must be assigned synchronously once the promise resolves: awaiting anything in between lets the browser run a tracked call the VM already dispatched, which would still reach the defaults. An overridden Module.onRunTrackedJs must return an array of unsigned 32 bit integer keys (0 to 4294967294, the last value of the range being reserved), or null on error, and must not throw; a throw, a key outside that range, or a key repeated within the array, is treated as an evaluation error and yields {error, badarg}. Returning a key hands it over to the VM until Module.onTrackedObjectDelete is called for it, so a key that a live handle still owns must not be returned again: the VM cannot detect that across calls, and the two handles would then share one value, the first of them collected deleting it for both.

Raises badarg if _Script is not iodata, and out_of_memory if the VM runs out of memory while tracking the values or building the result. Whenever the call fails after the hook returned keys, the values it tracked under them are dropped again, as if their handles had been garbage collected.

unregister_blur_callback/1


unregister_blur_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a blur event handler.

See also: unregister_keypress_callback/1.

unregister_click_callback/1


unregister_click_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a click event handler.

See also: unregister_keypress_callback/1.

unregister_dblclick_callback/1


unregister_dblclick_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a dblclick event handler.

See also: unregister_click_callback/1.

unregister_focus_callback/1


unregister_focus_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a focus event handler.

See also: unregister_blur_callback/1.

unregister_focusin_callback/1


unregister_focusin_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a focusin event handler.

See also: unregister_blur_callback/1.

unregister_focusout_callback/1


unregister_focusout_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a focusout event handler.

See also: unregister_blur_callback/1.

unregister_keydown_callback/1


unregister_keydown_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a keydown event handler.

See also: unregister_keypress_callback/1.

unregister_keypress_callback/1


unregister_keypress_callback(_TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

_TargetOrHandle: Target or handle

returns: ok or an error

Unregister a keypress listener.

To match Emscripten’s API, this function can take a target. This function unregisters every keypress listeners on the specified target.

Alternatively, this function can take a listener_handle() returned by register_keypress_callback/1,2,3. This will still unregister every keypress listeners on the same target.

Passing a listener_handle() is recommended to avoid surprises and for memory efficiency. If a handle is passed, it can then be garbage collected. If a handle is not passed, but the process dies, every keypress listener on the same target will be unregistered, including listeners that were later registered. This is a known limitation of the implementation that favored avoiding memory leaks and crashes.

unregister_keyup_callback/1


unregister_keyup_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a keyup event handler.

See also: unregister_keypress_callback/1.

unregister_mousedown_callback/1


unregister_mousedown_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a mousedown event handler.

See also: unregister_click_callback/1.

unregister_mouseenter_callback/1


unregister_mouseenter_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a mouseenter event handler.

See also: unregister_click_callback/1.

unregister_mouseleave_callback/1


unregister_mouseleave_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a mouseleave event handler.

See also: unregister_click_callback/1.

unregister_mousemove_callback/1


unregister_mousemove_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a mousemove event handler.

See also: unregister_click_callback/1.

unregister_mouseout_callback/1


unregister_mouseout_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a mouseout event handler.

See also: unregister_click_callback/1.

unregister_mouseover_callback/1


unregister_mouseover_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a mouseover event handler.

See also: unregister_click_callback/1.

unregister_mouseup_callback/1


unregister_mouseup_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a mouseup event handler.

See also: unregister_click_callback/1.

unregister_resize_callback/1


unregister_resize_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a resize event handler.

See also: unregister_keypress_callback/1.

unregister_scroll_callback/1


unregister_scroll_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a scroll event handler.

See also: unregister_resize_callback/1.

unregister_touchcancel_callback/1


unregister_touchcancel_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a touchcancel event handler.

See also: unregister_touchstart_callback/1.

unregister_touchend_callback/1


unregister_touchend_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a touchend event handler.

See also: unregister_touchstart_callback/1.

unregister_touchmove_callback/1


unregister_touchmove_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a touchmove event handler.

See also: unregister_touchstart_callback/1.

unregister_touchstart_callback/1


unregister_touchstart_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a touchstart event handler.

See also: unregister_keypress_callback/1.

unregister_wheel_callback/1


unregister_wheel_callback(TargetOrHandle::html5_target() | listener_handle()) -> ok | {error, register_error_reason()}

Unregister a wheel event handler.

See also: unregister_keypress_callback/1.