zoukankan      html  css  js  c++  java
  • 在java中

    // 进入prompt回调
    public class JSBridgeWebChromeClient extends WebChromeClient {
    @Override
    public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
    result.confirm(JSBridge.callJava(view, message));
    return true;
    }
    }

    // 调用java逻辑
    public class JSBridge {
    ...
    public static String callJava(WebView webView, String uriString) {
    String methodName = "";
    String className = "";
    String param = "{}";
    String port = "";
    if (!TextUtils.isEmpty(uriString) && uriString.startsWith("JSBridge")) {
    Uri uri = Uri.parse(uriString);
    className = uri.getHost();
    param = uri.getQuery();
    port = uri.getPort() + "";
    String path = uri.getPath();
    if (!TextUtils.isEmpty(path)) {
    methodName = path.replace("/", "");
    }
    }

    // 基于上面的className、methodName和port path调用对应类的方法
    if (exposedMethods.containsKey(className)) {
    HashMap<String, Method> methodHashMap = exposedMethods.get(className);

    if (methodHashMap != null && methodHashMap.size() != 0 && methodHashMap.containsKey(methodName)) {
    Method method = methodHashMap.get(methodName);
    if (method != null) {
    try {
    method.invoke(null, webView, new JSONObject(param), new Callback(webView, port));
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    }
    return null;
    }
    }

    // 直接进入showToast函数的实现
    public static void showToast(WebView webView, JSONObject param, final Callback callback) {
    String message = param.optString("msg");
    Toast.makeText(webView.getContext(), message, Toast.LENGTH_SHORT).show();
    if (null != callback) {
    try {
    JSONObject object = new JSONObject();
    object.put("key", "value");
    object.put("key1", "value1");
    callback.apply(getJSONObject(0, "ok", object));
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

    // 上述程序的callback.apply方法实现如下: 即通过webView.loadUrl实现java调用js的方法
    public class Callback {
    private static Handler mHandler = new Handler(Looper.getMainLooper());
    private static final String CALLBACK_JS_FORMAT = "javascript:JSBridge.onFinish('%s', %s);";
    private String mPort;
    private WeakReference<WebView> mWebViewRef;

    public Callback(WebView view, String port) {
    mWebViewRef = new WeakReference<>(view);
    mPort = port;
    }

    public void apply(JSONObject jsonObject) {
    final String execJs = String.format(CALLBACK_JS_FORMAT, mPort, String.valueOf(jsonObject));
    if (mWebViewRef != null && mWebViewRef.get() != null) {
    mHandler.post(new Runnable() {
    @Override
    public void run() {
    mWebViewRef.get().loadUrl(execJs);
    }
    });

    }

    }

  • 相关阅读:
    实例模拟struts核心流程
    不同语言下的日期格式化大全
    Android基础之响应Menu键弹出菜单Demo
    c++复习基础要点02 虚函数与模板 与static inline是否共存
    Android listView scroll 恢复滚动位置
    centos本地源搭建——iso
    easy_install和pip区别
    在前台运行Service
    mybatis处理集合、循环、数组和in查询等语句的使用
    java并发库 Lock 公平锁和非公平锁
  • 原文地址:https://www.cnblogs.com/ly570/p/11291185.html
Copyright © 2011-2022 走看看