Android jsbridge

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容