Class JavascriptContext

java.lang.Object
com.codename1.javascript.JavascriptContext

public class JavascriptContext extends Object

Represents a Javascript context of a single BrowserComponent. This provides support for executing Javascript in the BrowserComponent, registering Java callbacks to allow Javascript to call Java functions, and returning values from Javascript to Java.

NOTE: The com.codename1.javascript package is now deprecated. The preferred method of Java/Javascript interop is to use BrowserComponent#execute(java.lang.String), com.codename1.util.SuccessCallback), BrowserComponent#executeAndWait(java.lang.String), etc.. as these work asynchronously (except in the XXXAndWait() variants, which use invokeAndBlock() to make the calls synchronously.

Typically you would obtain a context for a BrowserComponent via its constructor, passing the BrowserComponent to the context.

E.g.

java WebBrowser b = new WebBrowser(); BrowserComponent bc = (BrowserComponent)b.getInternal(); JavascriptContext ctx = new JavascriptContext(bc); JSObject window = (JSObject)ctx.get("window");

  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final boolean
    Flag to enable/disable logging to a debug log.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Creates a Javascript context for the given BrowserComponent.
  • Method Summary

    Modifier and Type
    Method
    Description
    call(JSObject func, JSObject self, Object[] params)
    Calls a Javascript function (encapsulated in a JSObject) with a specified Javascript Object as the "this" context for the function call.
    call(String jsFunc, JSObject self, Object[] params)
    Calls a Javascript function with the given parameters.
    call(String jsFunc, JSObject self, Object[] params, boolean async, Callback callback)
    Calls a Javascript function with the given parameters, and optionally to make the call asynchronously.
    call(String jsFunc, JSObject self, Object[] params, boolean async, SuccessCallback callback)
    Calls a Javascript function with the given parameters, and optionally to make the call asynchronously.
    void
    callAsync(JSObject func, JSObject self, Object[] params, Callback callback)
    Calls a Javascript function (encapsulated in a JSObject) with a specified Javascript Object as the "this" context for the function call.
    void
    callAsync(JSObject func, JSObject self, Object[] params, SuccessCallback callback)
    Calls a Javascript function (encapsulated in a JSObject) with a specified Javascript Object as the "this" context for the function call.
    void
    callAsync(String jsFunc, JSObject self, Object[] params, Callback callback)
    Calls a Javascript function with the given parameters asynchronously.
    void
    callAsync(String jsFunc, JSObject self, Object[] params, SuccessCallback callback)
    Calls a Javascript function with the given parameters asynchronously.
    void
    Cleans up stale references to Javascript objects.
    get(String javascript)
    Executes a javascript string and returns the result of the execution as an appropriate object value depending on the type of value that was returned.
    void
    getAsync(String javascript, Callback callback)
    Returns the result of the provided javascript expression asynchronously.
    void
    getAsync(String javascript, SuccessCallback callback)
    Returns the result of the provided javascript expression asynchronously.
    Returns a reference to the Javascript "window" object.
    void
    set(String key, Object value)
    Sets a Javascript value given a compatible Java object value.
    void
    set(String key, Object value, boolean async)
    Sets a Javascript value given a compatible Java object value.
    void
    setAsync(String key, Object value)
    Sets a Javascript value given a compatible Java object value asynchronously.
    final void
    Sets the BrowserComponent on which this javascript context runs.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • DEBUG

      public static final boolean DEBUG
      Flag to enable/disable logging to a debug log.
      See Also:
  • Constructor Details

    • JavascriptContext

      public JavascriptContext(BrowserComponent c)

      Creates a Javascript context for the given BrowserComponent.

      Parameters
      • c
  • Method Details

    • setBrowserComponent

      public final void setBrowserComponent(BrowserComponent c)

      Sets the BrowserComponent on which this javascript context runs.

      Parameters
      • c: The BrowserComponent on which the context runs.
    • cleanup

      public void cleanup()
      Cleans up stale references to Javascript objects. This is triggered randomly whenever a JSObject is constructed (with a given probability threshold). If this is never called then the JS GC won't be able to free any objects that have ever been wrapped by JSObject because they are stored in the global lookup table.
    • get

      public Object get(String javascript)

      Executes a javascript string and returns the result of the execution as an appropriate object value depending on the type of value that was returned.

      Return value types will depend on the Javascript type returned. The following table shows the mappings:

       Javascript TypeJava Return Type
      
      
       Numberjava.lang.Double
       Stringjava.lang.String
       Booleanjava.lang.Boolean
       ObjectJSObject
       FunctionJSObject
       nullnull
       undefinednull
      

      Example java //Get the window object JSObject window = (JSObject)ctx.get("window"); // Create a new empty Javascript Object JSObject newObj = (JSObject)ctx.get("{}"); // Get the current document body contents as a string. String html = (String)ctx.get("document.body.innerHTML"); // Get a numerical result Double result = (Double)ctx.get("1+2"); // Get a Javascript function object JSObject func = (JSObject)ctx.get("function(a,b){ return a+b }"); // Get a boolean result Boolean res = (Boolean)ctx.get("1 < 2");

      Parameters
      • javascript: The javascript to be executed.
      Returns

      The result of the javascript expression.

    • getWindow

      public JSObject getWindow()

      Returns a reference to the Javascript "window" object.

      Returns

      The window object.

    • getAsync

      public void getAsync(String javascript, Callback callback)

      Returns the result of the provided javascript expression asynchronously.

      Parameters
      • javascript: A javascript expression.

      • callback: Callback to be called with the result of the expression.

    • getAsync

      public void getAsync(String javascript, SuccessCallback callback)

      Returns the result of the provided javascript expression asynchronously.

      Parameters
      • javascript: A javascript expression.

      • callback: Callback to be called with the result of the expression.

    • set

      public void set(String key, Object value)

      Sets a Javascript value given a compatible Java object value. This is an abstraction upon javascript to execute key = value.

      The key is any Javascript expression whose result can be assigned. The value is a Java object that will be converted into a Javascript object as follows:

      Java typeConverted to

      DoubleNumber IntegerNumber FloatNumber LongNumber StringString JSObjectObject by ref nullnull

      Hence if you want to set a Javascript string value, you can just pass a Java string into this method and it will be converted.

      JSObject "By Ref"

      You may notice that if you pass a JSObject as the value parameter, the table above indicates that it is passed by reference. A JSObject merely stores a reference to a Javascript object from a lookup table in the Javascript runtime environment. It is this lookup that is ultimately assigned to the "key" when you pass a JSObject as the value. This has the effect of setting the actual Javascript Object to this value, which is effectively a pass-by-reference scenario.

      Examples

      java // Set the window.location.href to a new URL ctx.set("window.location.href", "http://google.com"); // Create a new JSObject, and set it as a property of another JSObject JSObject camera = (JSObject)ctx.get("{}"); ctx.set("window.camera", camera); // Set the name of the camera via JSObject.set() camera.set("name", "My Camera"); // Get the camera's name via Javascript String cameraName = (String)ctx.get("window.camera.name"); // Should be "My Camera" // Set the camera name via context.set() ctx.set("camera.name", "New name"); String newName = (String)camera.get("name"); // Should be "New name"

      Parameters
      • key: A Javascript expression whose result is being assigned the value.

      • value: @param value The object or value that is being assigned to the Javascript variable on the left.

    • set

    • setAsync

      public void setAsync(String key, Object value)

      Sets a Javascript value given a compatible Java object value asynchronously.

      Parameters
      • key: A Javascript expression whose result is being assigned the value.

      • value: @param value The object or value that is being assigned to the Javascript variable on the left.

      See also
      • #set(java.lang.String, java.lang.Object)
    • call

      public Object call(JSObject func, JSObject self, Object[] params)

      Calls a Javascript function (encapsulated in a JSObject) with a specified Javascript Object as the "this" context for the function call. Also passes a set of arguments to the method.

      This operates almost exactly like the Javascript Function.apply() method.

      Note that JSObject also has a couple of call() methods that may be more convenient to use as they will automatically set the "self" parameter to the JSObject callee. This version of the method is handy in cases where you have been passed a function (perhaps as a callback) and you need to execute that function in a particular context.

      Example

      java // Get the Array.push method as an object JSObject push = (JSObject)ctx.get("Array.prototype.push"); // Create a new array JSObject colors = (JSObject)ctx.get("['red', 'green', 'blue']"); // "Push" a new color onto the array directly using the JSObject's call() // method colors.call("push", "purple"); // Alternate method using JavascriptContext.call() ctx.call(push, colors, "orange"); // Check size of colors array now Double size = (Double)colors.get("length"); // Should be 5.0 // Get 4th color (should be purple) String purple = (String)colors.get(3); // Get 5th color (should be orange) String orange = (String)colors.get(4);

      Parameters
      • func: The Javascript function object that is being called.

      • self: Javascript Object that should act as "this" for the function call.

      • params: @param params The parameters that should be passed to the function. These parameters should be passed as Java objects but will be converted into their associated Javascript version.

      Returns
      Returns:
      The result of the function call. Javascript results will be automatically converted to their associated Java types.
    • callAsync

      public void callAsync(JSObject func, JSObject self, Object[] params, Callback callback)

      Calls a Javascript function (encapsulated in a JSObject) with a specified Javascript Object as the "this" context for the function call.

      Parameters
      • func: The Javascript function object that is being called.

      • self: Javascript Object that should act as "this" for the function call.

      • params: @param params The parameters that should be passed to the function. These parameters should be passed as Java objects but will be converted into their associated Javascript version.

      • callback: The callback to pass the return value to.

    • callAsync

      public void callAsync(JSObject func, JSObject self, Object[] params, SuccessCallback callback)

      Calls a Javascript function (encapsulated in a JSObject) with a specified Javascript Object as the "this" context for the function call.

      Parameters
      • func: The Javascript function object that is being called.

      • self: Javascript Object that should act as "this" for the function call.

      • params: @param params The parameters that should be passed to the function. These parameters should be passed as Java objects but will be converted into their associated Javascript version.

      • callback: The callback to pass the return value to.

    • call

      public Object call(String jsFunc, JSObject self, Object[] params)

      Calls a Javascript function with the given parameters. This would translate roughly into executing the following javascript:

      jsFunc.call(self, param1, param1, ..., paramn)

      Parameters
      • jsFunc: @param jsFunc A javascript expression that resolves to a function object that is to be called.

      • self: The Javascript object that is used as "this" for the method call.

      • params: @param params Array of the Javascript parameters, as Java objects. These use the same conversions as are described in the docs for set().

      Returns
      Returns:
      Returns the return value converted to the corresponding Java object type.
    • callAsync

      public void callAsync(String jsFunc, JSObject self, Object[] params, Callback callback)

      Calls a Javascript function with the given parameters asynchronously. This would translate roughly into executing the following javascript:

      jsFunc.call(self, param1, param1, ..., paramn)

      Parameters
      • jsFunc: @param jsFunc A javascript expression that resolves to a function object that is to be called.

      • self: The Javascript object that is used as "this" for the method call.

      • params: @param params Array of the Javascript parameters, as Java objects. These use the same conversions as are described in the docs for set().

      • callback: @param callback Callback to pass the return value converted to the corresponding Java object type.

    • callAsync

      public void callAsync(String jsFunc, JSObject self, Object[] params, SuccessCallback callback)

      Calls a Javascript function with the given parameters asynchronously. This would translate roughly into executing the following javascript:

      jsFunc.call(self, param1, param1, ..., paramn)

      Parameters
      • jsFunc: @param jsFunc A javascript expression that resolves to a function object that is to be called.

      • self: The Javascript object that is used as "this" for the method call.

      • params: @param params Array of the Javascript parameters, as Java objects. These use the same conversions as are described in the docs for set().

      • callback: @param callback Callback to pass the return value converted to the corresponding Java object type.

    • call

      public Object call(String jsFunc, JSObject self, Object[] params, boolean async, Callback callback)

      Calls a Javascript function with the given parameters, and optionally to make the call asynchronously. This would translate roughly into executing the following javascript:

      jsFunc.call(self, param1, param1, ..., paramn)

      Parameters
      • jsFunc: @param jsFunc A javascript expression that resolves to a function object that is to be called.

      • self: The Javascript object that is used as "this" for the method call.

      • params: @param params Array of the Javascript parameters, as Java objects. These use the same conversions as are described in the docs for set().

      • async: If true, the call will be made asynchronously.

      • callback: Used if async is true to pass the return value.

      Returns
      Returns:
      Returns the return value converted to the corresponding Java object type. This will always return null if async is true.
    • call

      public Object call(String jsFunc, JSObject self, Object[] params, boolean async, SuccessCallback callback)

      Calls a Javascript function with the given parameters, and optionally to make the call asynchronously. This would translate roughly into executing the following javascript:

      jsFunc.call(self, param1, param1, ..., paramn)

      Parameters
      • jsFunc: @param jsFunc A javascript expression that resolves to a function object that is to be called.

      • self: The Javascript object that is used as "this" for the method call.

      • params: @param params Array of the Javascript parameters, as Java objects. These use the same conversions as are described in the docs for set().

      • async: If true, the call will be made asynchronously.

      • callback: Used if async is true to pass the return value.

      Returns
      Returns:
      Returns the return value converted to the corresponding Java object type. This will always return null if async is true.