webview与js交互2

来源:互联网 发布:js字符串转换成日期 编辑:程序博客网 时间:2024/05/02 07:47

1、上篇说到了webview与js交互的一种方法,通过addJavascriptInterface暴露java方法给js调用。但是也说到了,这个方法在低版本的系统有安全漏洞。现在介绍另一个安全的方法。其实也是用到了webview,自定义webclient。具体是实现webchromeclient.

public class MyWebChromeClient extends WebChromeClient {    private final String TAG = "MyWebChromeClient";    @Override    public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {        Log.i(TAG,"message:"+message + " defaultValue:"+defaultValue);        result.confirm(message);        return true;//        return super.onJsPrompt(view, url, message, defaultValue, result);    }}

onJsPrompt方法是在JavaScript中prompt方法被调用的时候,webchromeclient中会回调该方法。我们可以通过参数message,defaultvalue来进行相关判断,执行相关java方法。这两个参数分别对应了JavaScript方法中的prompt方法中的两个参数。接收到参数之后,通过result.confirm(message)方法把message作为返回值返回给JavaScript。


看看html文件

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"><HTML><HEAD><meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" /><META http-equiv="Content-Type/Refresh" content="text/html/10; charset=UTF-8" ><script>   function showMsg(){      alert("hello world!");   }   function showMsgInAndroid(x){      var ret = prompt(x,"param");      console.log("js返回值:"+ret)      var x=document.getElementById("text");      x.innerHTML=ret;   }</script></HEAD><BODY><span>测试js使用</span><button id='btntest' onclick='showMsgInAndroid("fun1")'>调用方法1</button><button id='btnsay' onclick='showMsgInAndroid("fun2")'>调用方法2</button><p id="text">显示结果</p></BODY></HTML>

在上面html文件中,在function中,把showMsgInAndroid()中的参数作为prompt方法中的参数一传给WebChromeClient中的onJsPrompt方法。并把java中返回的值ret设置为元素p的内容。

最后附上demo链接:

链接:http://pan.baidu.com/s/1mhSxFWc 密码:wq4e


0 0