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 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)
, 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:
// 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:
camera.capture(function(url){
if ( url == null ){
// No image was captured
return;
}
// Fetch the preview <img> tag.
var image = document.getElementById('preview-image');
// Set the preview URL to the image that was taken.
image.src = url;
});
Modifier and Type | Method and Description |
---|---|
void |
apply(JSObject self,
Object[] args)
Deprecated.
|