Last active
September 24, 2022 10:38
-
-
Save nabeix/1043119ea9bff503815f to your computer and use it in GitHub Desktop.
Check available types of Android WebView JavascriptInterface
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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