module JS
JavaScript interoperations module
The JS
module provides a way to interact with JavaScript from Ruby.
Example¶ ↑
require 'js' JS.eval("return 1 + 2") # => 3 JS.global[:document].write("Hello, world!") div = JS.global[:document].createElement("div") div[:innerText] = "click me" JS.global[:document][:body].appendChild(div) div.addEventListener("click") do |event| puts event # => # [object MouseEvent] puts event[:detail] # => 1 div[:innerText] = "clicked!" end
If you are using ‘ruby.wasm` without `stdlib` you will not have `addEventListener` and other specialized functions defined. You can still acomplish many of the same things using `call` instead.
Example¶ ↑
require 'js' JS.eval("return 1 + 2") # => 3 JS.global[:document].call(:write, "Hello, world!") div = JS.global[:document].call(:createElement, "div") div[:innerText] = "click me" JS.global[:document][:body].call(:appendChild, div) div.call(:addEventListener, "click") do |event| puts event # => # [object MouseEvent] puts event[:detail] # => 1 div[:innerText] = "clicked!" end
Constants
- Null
- Undefined
Public Class Methods
eval(code) → JS::Object
click to toggle source
Evaluates the given JavaScript code, returning the result as a JS::Object
.
p JS.eval("return 1 + 1").to_i # => 2 p JS.eval("return new Object()").is_a?(JS.global[:Object]) # => true
static VALUE _rb_js_eval_js(VALUE _, VALUE code_str) { rb_js_abi_host_string_t abi_str; rstring_to_abi_string(code_str, &abi_str); rb_js_abi_host_js_abi_result_t ret; rb_js_abi_host_eval_js(&abi_str, &ret); raise_js_error_if_failure(&ret); return jsvalue_s_new(ret.val.success); }
global → JS::Object
click to toggle source
Returns globalThis
JavaScript object.
p JS.global p JS.global[:document]
static VALUE _rb_js_global_this(VALUE _) { return jsvalue_s_new(rb_js_abi_host_global_this()); }
is_a?(js_obj, js_class) → true or false
click to toggle source
Returns true
if js_class is the instance of js_obj, otherwise returns false
. Comparison is done using the instanceof
in JavaScript.
p JS.is_a?(JS.global, JS.global[:Object]) #=> true p JS.is_a?(JS.global, Object) #=> false
static VALUE _rb_js_is_kind_of(VALUE klass, VALUE obj, VALUE c) { if (!IS_JSVALUE(obj)) { return Qfalse; } struct jsvalue *val = DATA_PTR(obj); VALUE js_klass_v = _rb_js_try_convert(klass, c); struct jsvalue *js_klass = DATA_PTR(js_klass_v); return RBOOL(rb_js_abi_host_instance_of(val->abi, js_klass->abi)); }
promise_scheduler()
click to toggle source
# File ext/js/lib/js.rb, line 68 def self.promise_scheduler @promise_scheduler end
try_convert(obj) → JS::Object or nil
click to toggle source
Try to convert the given object to a JS::Object
using to_js
method. Returns nil
if the object cannot be converted.
p JS.try_convert(1) # => JS::Object p JS.try_convert("foo") # => JS::Object p JS.try_convert(Object.new) # => nil p JS.try_convert(JS::Object.wrap(Object.new)) # => JS::Object
VALUE _rb_js_try_convert(VALUE klass, VALUE obj) { if (_rb_js_is_js(klass, obj)) { return obj; } else if (rb_respond_to(obj, i_to_js)) { return rb_funcallv(obj, i_to_js, 0, NULL); } else { return Qnil; } }