关于WebView与HTML5交互的问题,这里不做详细讲解,有关Android WebView的使用,请查看此文章,讲解的灰常详细
开发过程中,突然发现android能调用js方法,但是js方法调用android接口是报了如下错误:
04-21 16:45:29.069: I/chromium(26126): [INFO:CONSOLE(18)] "Uncaught TypeError: Object [object Object] has no method 'XXXXXX'", source: http://192.168.1.XX:XXXX/test.html (18)
经过对此问题的仔细分析,发现,当AndroidManifest.xml文件中的targetSdkVersion小于等于16时,就没有问题了,可以正常调用,于是就以下2种解决方式。
方法1:
当你的最高版本不需要支持SDK 16以上的,就把targetSdkVersion配置为16。如下:<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="16" />
方法2:
当你需要支持SDK>16的时候,当把targetSdkVersion设置大于16时,代码不会报错,但是会出现上面日志中的问题。解决方法如下:final class InJavaScript implements JavaScriptResponseInterface { @Override @JavascriptInterface public void loginResponse(final String res) { // TODO Auto-generated method stub handler.post(new Runnable() { public void run() { TextView show = (TextView) findViewById(R.id.txt); show.setText(res); } }); } @Override @JavascriptInterface public void exitResponse(final String res) { // TODO Auto-generated method stub handler.post(new Runnable() { public void run() { TextView show = (TextView) findViewById(R.id.txt); show.setText(res); } }); } }
在每个接口加上@JavascriptInterface注解,这是android 4.2之后,谷歌为了解决android与js交互的漏洞,新添加的功能。android 4.2之前,能够通过注入恶意js对android手机进行入侵。
这样就能解决js无法调用android接口的问题。