美文网首页
Android jsbridge

Android jsbridge

作者: andorid_xiao | 来源:发表于2024-04-21 15:05 被阅读0次

    js调用java

    1. JavascriptInterface

    这是Android提供的Javascript与Native通信的官方解决方案。
    首先Java代码要实现这么一个类,它的作用是提供给Javascript调用。

    public class JavascriptInterface {
    
        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show();
        }
    }
    

    然后把这个类添加到WebView的JavascriptInterface中。

    webView.addJavascriptInterface(new JavascriptInterface(), "javascriptInterface");
    

    在Javascript代码中就能直接通过“javascriptInterface”直接调用了该Native的类的方法。

    function showToast(toast) {
        javascript:javascriptInterface.showToast(toast);
    }
    

    但是这个官方提供的解决方案在Android4.2之前存在安全漏洞。在Android4.2之后,加入了@JavascriptInterface才得到解决。所以考虑到兼容低版本的系统,JavascriptInterface并不适合。

    如需回调,增加callbackId,通过java to js进行回调。

    2.WebViewClient.shouldOverrideUrlLoading()

    拦截所有WebView的Url跳转。页面可以构造一个特殊格式的Url跳转,shouldOverrideUrlLoading拦截Url后判断其格式,然后Native就能执行自身的逻辑了。

    public class CustomWebViewClient extends WebViewClient {
    
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (isJsBridgeUrl(url)) {
                // JSbridge的处理逻辑
                //openURL: jsbridge://publicAccount/pbReport?p=10004&p1=appid%3D1000218%26typeid%3D1000280%26
    
                return true;
            }
            return super.shouldOverrideUrlLoading(view, url);
        }
    }
    

    java调用js

    Java通信Javascript只有一种方式。

    那就是调用WebView.loadUrl()去执行一个预先定义好的Javascript方法。

    webView.loadUrl(String.format("javascript:JsBridge.handleMessageFromNative(%s)", data));
    

    如需回调,增加callbackId,通过js to java进行回调。

    参考文章

    JsBridge实现

    实现一个JSBridge

    相关文章

      网友评论

          本文标题:Android jsbridge

          本文链接:https://www.haomeiwen.com/subject/qxevxjtx.html