Interface JSFunction


public interface JSFunction

The JSFunction interface allows you to implement functions in Java that can be called from Javascript. You can assign any JSFunction object to be a member method of an existing JSObject via the Object) JSObject.set() method. Then the function can be called from javascript just like any other Javascript method. JSFunction methods are called asynchronously from Javascript to prevent deadlocks. If you require a return value to Javascript, you can do that by passing a callback function which is called by the JSFunction with some parameters.

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.

The following example, adds a camera object to the Javascript environment that has a capture() method, which can be used to capture images using the device's camera:

java // Create a new Javascript object "camera" final JSObject camera = (JSObject)ctx.get("{}"); // Create a capture() method on the camera object // as a JSFunction callback. camera.set("capture", new JSFunction(){ public void apply(JSObject self, final Object[] args) { Display.getInstance().capturePhoto(new ActionListener(){ public void actionPerformed(ActionEvent evt) { String imagePath = (String)evt.getSource(); // Get the callback function that was provided // from javascript JSObject callback = (JSObject)args[0]; ctx.call( callback, // The function camera, // The "this" object new Object[]{"file://"+imagePath} // Parameters ); } }); } }); // Add the camera object to the top-level window object ctx.set("window.camera", camera);

We can then capture photos directly from Javascript using a function similar to the following:

java camera.capture(function(url){ if ( url == null ){ // No image was captured return; } // Fetch the preview tag. var image = document.getElementById('preview-image'); // Set the preview URL to the image that was taken. image.src = url; });

  • Method Summary

    Modifier and Type
    Method
    Description
    void
    apply(JSObject self, Object[] args)