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' οnclick='showMsgInAndroid("fun1")'>调用方法1</button> <button id='btnsay' οnclick='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