随着混合应用开发越来越多,需求场景的不断变化,碰到一个问题,最底层H5页面点击图片预览,是直接DIV图层的显示,而不是页面的跳转,所以点击返回按钮的时候,不能直接返回,要先调用js关掉图层,所以需要交给js进行处理。
常用的Java调用js,直接用loadUrl,但是没有返回值,不能进行回调,sdk19以上采用evaluateJavascript方法,在回调方法里又返回值,效率优于loadUrl,所以最后采用evaluateJavascript方法进行处理。
补充:转自:https://blog.youkuaiyun.com/bin622/article/details/71171256
1、webview的配置
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new JSBridge(this, webView), "JSBridge");
2、类JSBridge示例
class JSBridge{
private Context mContext;
private WebView mWebView;
JSBridge(Context context, WebView webView) {
mContext = context;
mWebView = webView;
}
/**
* 从app获取数据
* @param dataType 获取的数据类型
* @param extra 传给app的额外数据
* @return
*/
@JavascriptInterface
public String getData(String dataType, String extra) {
}
}
3、js调用java的代码(只能调用那些被@JavascriptInterface注解的方法)
window.jsInterfaceName.methodName(parameterValues)此例中我们使用的是JSBridge作为注入接口名称。
例如:window.JSBridge.getData()
4、java调用js的方法:(更多调用方法参考http://www.imooc.com/article/1475)
String callbackUrl = "javascript:" + functionName + "()";
mWebView.post(new Runnable() {
@Override
public void run() {
mWebView.loadUrl(callbackUrl);
}
});