美文网首页
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