Skip to content

Instantly share code, notes, and snippets.

@nabeix
Last active September 24, 2022 10:38
Show Gist options
  • Save nabeix/1043119ea9bff503815f to your computer and use it in GitHub Desktop.
Save nabeix/1043119ea9bff503815f to your computer and use it in GitHub Desktop.
Check available types of Android WebView JavascriptInterface
package net.nabeix.javascriptinterfacetest;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.webkit.JavascriptInterface;
import android.webkit.WebView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
WebView webView = new WebView(this);
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSInterface(), "JSInterface");
String html = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><script>"
+ "window.onload = function() {"
+ "JSInterface.setString('foo');"
+ "JSInterface.setInteger(1);"
+ "JSInterface.setFloat(1.01);"
+ "JSInterface.setStringArray(['foo', 'bar', 'baz']);"
+ "JSInterface.setIntegerArray([1, 2, 3]);"
+ "JSInterface.setFloatArray([1.01, 1.02, 1.03]);"
+ "JSInterface.setTwoDimStringArray([['foo1', 'bar1', 'baz1'], ['foo2', 'bar2', 'baz2']]);"
+ "JSInterface.setTwoDimIntegerArray([[11, 12, 13], [21, 22, 23]]);"
+ "JSInterface.setTwoDimFloatArray([[1.01, 1.02, 1.03], [2.01, 2.02, 2.03]]);"
+ "JSInterface.setObject({name: 'Tom'});"
+ "};"
+ "</script></head><body>Android WebView JavascriptInterface Test</body></html>";
webView.loadData(html, "text/html", "UTF-8");
setContentView(webView);
}
private class JSInterface {
@JavascriptInterface
public void setString(String text) {
// SUCCESS
Log.d("JSInterface", "[setString] text: " + text);
}
@JavascriptInterface
public void setInteger(int num) {
// SUCCESS
Log.d("JSInterface", "[setInteger] num: " + num);
}
@JavascriptInterface
public void setFloat(float num) {
// SUCCESS
Log.d("JSInterface", "[setFloat] num: " + num);
}
@JavascriptInterface
public void setStringArray(String[] arr) {
// SUCCESS
Log.d("JSInterface", "[setStringArray] arr[0]: " + arr[0] + " arr[1]: " + arr[1] + " arr[2]: " + arr[2]);
}
@JavascriptInterface
public void setIntegerArray(int[] arr) {
// SUCCESS
Log.d("JSInterface", "[setIntegerArray] arr[0]: " + arr[0] + " arr[1]: " + arr[1] + " arr[2]: " + arr[2]);
}
@JavascriptInterface
public void setFloatArray(float[] arr) {
// SUCCESS
Log.d("JSInterface", "[setFloatArray] arr[0]: " + arr[0] + " arr[1]: " + arr[1] + " arr[2]: " + arr[2]);
}
@JavascriptInterface
public void setTwoDimStringArray(String[][] arr) {
// FAIL: arr is null
// Log.d("JSInterface", "[setTwoDimStringArray] arr[0][0]: " + arr[0][0] + " arr[0][1]: " + arr[0][1] + " arr[0][2]: " + arr[0][2]
// + " arr[1][0]: " + arr[1][0] + " arr[1][1]: " + arr[1][1] + " arr[1][2]: " + arr[1][2]);
}
@JavascriptInterface
public void setTwoDimIntegerArray(int[][] arr) {
// FAIL: arr is null
// Log.d("JSInterface", "[setTwoDimIntegerArray] arr[0][0]: " + arr[0][0] + " arr[0][1]: " + arr[0][1] + " arr[0][2]: " + arr[0][2]
// + " arr[1][0]: " + arr[1][0] + " arr[1][1]: " + arr[1][1] + " arr[1][2]: " + arr[1][2]);
}
@JavascriptInterface
public void setTwoDimFloatArray(float[][] arr) {
// FAIL: arr is null
// Log.d("JSInterface", "[setTwoDimFloatArray] arr[0][0]: " + arr[0][0] + " arr[0][1]: " + arr[0][1] + " arr[0][2]: " + arr[0][2]
// + " arr[1][0]: " + arr[1][0] + " arr[1][1]: " + arr[1][1] + " arr[1][2]: " + arr[1][2]);
}
@JavascriptInterface
public void setObject(Object obj) {
// FAIL: obj is null
Log.d("JSInterface", "[setObject] obj: " + obj);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment