关于android:混合开发之JSBridge安卓或IOS和H5交互

43次阅读

共计 1047 个字符,预计需要花费 3 分钟才能阅读完成。

原生调用 Web 端代码

WebView 是 Native 中加载网页的一个控件,该组件提供一个 evaluateJavascript() 办法运行 JS 代码。咱们要做的是在 Native 端执行一个 js 办法,在 Web 端进行监听。

Web 端定义方法

window.doit=function(data){console.log(data);
};

原生调用

webView.evaluateJavascript("window.doit(' 来自原生的数据 ')", null);

Web 端调用原生代码

当 Web 端要申请 Native 端的办法时,咱们首先要自定义一个 URL Schema,向 Native 端发动一个申请,最初在 Native 端的 WebView 进行监听。

URL schema 介绍

URL schema 是类 URL 的申请格局,如:<protocol>://<domain>/<path>?<query>

Web 端发送 URL schema 申请

比方咱们能够通过批改一个暗藏的 iframe 地址来实现发送申请:

<iframe src="jsbridge://showToast?text= 来自 Web 端端数据"></iframe>

舒适提醒:失常来说是能够通过 window.location.href 达到发动网络申请的成果的,然而有一个很重大的问题,就是如果咱们间断屡次批改 window.location.href 的值,在 Native 层只能接管到最初一次申请,后面的申请都会被疏忽掉。所以 JS 端发动网络申请的时候,须要应用 iframe,这样就能够防止这个问题。

原生实现监听

安卓

在 Android 中 (WebViewClient 里),通过 shouldoverrideurlloading 能够捕捉到 url scheme 的触发:

private WebViewClient webViewClient = new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url){
        // 读取到 url 后自行进行剖析解决

        // 如果返回 false,则 WebView 解决链接 url,如果返回 true,代表 WebView 依据程序来执行 url
        return true;
    }
}

舒适提醒:另外,Web 中也能够不通过 iframe.src 来触发 scheme,通过 window.prompt(uri, “”); 来触发 scheme,而后原生中通过重写 WebViewClient 的 onJsPrompt 来获取 uri。

正文完
 0