Reputation: 3594
I'm trying to develop a Cordova plugin for Android following the tutorial found here: http://www.mat-d.com/site/tutorial-creating-a-cordova-phonegap-plugin-for-android-app/
So far, so good. However, I'd like to know how to send data/trigger an event in my Javascript code from my plugin - for example, when a user taps an icon in my native code, I'd like my javascript to do something. Is this possible?
Upvotes: 8
Views: 6056
Reputation: 4903
Using Android I achieved it with:
cordova.getActivity().runOnUiThread(() -> webView.loadUrl("javascript:console.log('hey!');"));
Upvotes: 2
Reputation: 3594
So I got it to work as follows:
I created a private CallbackContext object in my plugin:
private CallbackContext callbackContext;
and stored the CallbackContext supplied in the execute() method in it:
public boolean execute(final String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
this.callbackContext = callbackContext;
}
Elsewhere in my Java code, I can access this callback and send plugin results to it. This callback will become invalid, however, after it's first triggered, unless keepCallback is set to true
:
PluginResult pluginResult = new PluginResult(PluginResult.Status.OK, "WHAT");
pluginResult.setKeepCallback(true);
callbackContext.sendPluginResult(pluginResult);
This made me a happy camper. I hope it helps someone else!
Upvotes: 14
Reputation: 1319
Yes you can trigger webview from Native code.
For Android :
this.appView.loadUrl("javascript:yourmethodname());");
For iOS :
[webView stringByEvaluatingJavaScriptFromString:@"yourmethodname()"];
yourmethodname
should be the javascript function you wish to call.
Upvotes: 2