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调Js)