android调用JS失败时可能的原因
客户端需要调用JS,完成前后端的交互,更新前端的界面等。
一般来说,只需要调用下面一句话就可以调用JS中alipayCallBack()方法。
String msg = "message"; webView.loadUrl("javascript:showInfoFromJava(" + msg + ")");
但是在功能实现的时候失败了。web报这个错误:
web console uncaught referenceerror: message is not defined at null:1
意思就是web认为message是一个变量名,而不是一个变量值。查了一下,发现JS定义String变量的时候用单引号,而JAVA是使用双引号。
因此把代码改成
String msg = "message"; webView.loadUrl("javascript:showInfoFromJava('" + msg + "')");
通过添加单引号,JS就知道message是变量值而不是变量名字了。在调用含参数的JS方法时容易出现这个问题。
如果是不含参数的JS方法,则直接写就好。例如下面,就直接调用了showInfoFromJava()方法。
webView.loadUrl("javascript:showInfoFromJava()");
android调用JS方法注意两个编程方法中变量表示的不同。
还有其他4中情况,也可能会导致JS调用失败,一并总结如下:
1. webView.getSettings().setJavaScriptEnable(true); 设置webView支持JavaScript
2. webView.addJavascriptInterface(new JSCallBack(), “JSCallBack”); 绑定一个java对象webView,就是把一个Java对象和网页JS相关联。
3. 在JSCallBack类中,增加@JavascriptInterface注解,导入android.webkit.JavascriptInterface;
4. 检查ManiFeast,将android:targetSdkVersion改成17及一下。<其实我自己的工程就是17,但是没有影响>
附上部分Html代码:
<html><body><script type="text/javascript"> var a = document.documentElement.clientHeight; document.getElementById("id").style.height = a+"px";script><script> function showInfoFromJava(msg){ alert(msg); }script>body>html>
更多相关文章
- (转)android AppWidgetProvider 定时刷新问题
- Android(安卓)-- AsyncTask
- Android(安卓)display架构分析-SW架构分析(1-8)
- Android:SQLite数据库
- Android(安卓)NDK之JNI使用例子
- Android显示从网络下载图片偏小的问题
- Android(安卓)调用系统应用选文件
- Android(安卓)Activity生命周期以及Fragment生命周期的区别与分
- android input命令 模拟按键