最近在做原生和js端的互調的功能,自己改了個demo,給大家講解下。
先上js代碼
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>方法調用基本流程測試</title>
</head>
<body>
<div id="helloweb"> <div id="echoInfo">如果有數據返回,會顯示在這兒</div></div><script type="text/javascript">function funFromjs(){document.getElementById("helloweb").innerHTML="HelloWebView,i'm from js";}function echoInfo( container, obj ){var domContainer = document.getElementById('echoInfo');domContainer.innerHTML = JSON.stringify( obj );}//function windowCallback( str ){//echoInfo( 'echoInfo', str );//}window.windowCallback = function( str ){echoInfo( 'echoInfo', str );};var MfsJSBridge = MfsJSBridge || undefined;if( undefined != MfsJSBridge ){//看這里var params = {id : 1,name : '測試'};var strParams = JSON.stringify( params );MfsJSBridge.invoke( 'testFunc', strParams, 'windowCallback');}else{alert('未定義MfsJSBridge');}</script></body>
</html>
android webview 設置可用javascript
//設置編碼mWebView.getSettings().setDefaultTextEncodingName("utf-8");//支持js
mWebView.getSettings().setJavaScriptEnabled(true);
android 調js
mBtn1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mWebView.loadUrl("javascript:funFromjs()");//其中funFromjs()為js的方法Toast.makeText(mContext, "調用javascript:funFromjs()", Toast.LENGTH_LONG).show();}});
js調原生,原生響應時間并回調數據
mWebView.addJavascriptInterface(new Object(){//注意4.4以后加注解,位置在這個方法名上面,鑒于很多這個的例子,瞎、、寫注解位置,并需要下 //載積分寫了這個@JavascriptInterfacepublic void invoke(String name ,String t,String callback) {if(name.equals("testFunc")){ //其中t 為js帶過來的數據 Toast.makeText(mContext, t,Toast.LENGTH_LONG).show();String strJson = "{\"code\":122, \"msg\":\"1231\", \"data\":null}";//回調數據給js 其中callback 為android 掉js 的方法名稱。mWebView.loadUrl("javascript:"+ callback +"('" + strJson + "')");}// Toast.makeText(mContext, name, Toast.LENGTH_LONG).show();}},"MfsJSBridge");
代碼比較簡單,最主要的是 @JavascriptInterface注解的位置大家注意下。
源碼下載