Android jsbridge

js調(diào)用java

1. JavascriptInterface

這是Android提供的Javascript與Native通信的官方解決方案。
首先Java代碼要實現(xiàn)這么一個類,它的作用是提供給Javascript調(diào)用。

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”直接調(diào)用了該Native的類的方法。

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

但是這個官方提供的解決方案在Android4.2之前存在安全漏洞。在Android4.2之后,加入了@JavascriptInterface才得到解決。所以考慮到兼容低版本的系統(tǒng),JavascriptInterface并不適合。

如需回調(diào),增加callbackId,通過java to js進行回調(diào)。

2.WebViewClient.shouldOverrideUrlLoading()

攔截所有WebView的Url跳轉(zhuǎn)。頁面可以構(gòu)造一個特殊格式的Url跳轉(zhuǎn),shouldOverrideUrlLoading攔截Url后判斷其格式,然后Native就能執(zhí)行自身的邏輯了。

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調(diào)用js

Java通信Javascript只有一種方式。

那就是調(diào)用WebView.loadUrl()去執(zhí)行一個預(yù)先定義好的Javascript方法。

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

如需回調(diào),增加callbackId,通過js to java進行回調(diào)。

參考文章

JsBridge實現(xiàn)

實現(xiàn)一個JSBridge

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容