JSBridge 是一種 webview 側(cè)和 native 側(cè)進行通信的手段
source:https://zhuanlan.zhihu.com/p/381459761
1. 實現(xiàn)原理
app的native端攔截webview 的url請求來互相通信
2. 實現(xiàn)步驟
2.1 js端
setupWebViewJavascriptBridge方法的作用,將回調(diào)callback放入window.WVJBCalls數(shù)組中,沒有則創(chuàng)建之。
```function setupWebViewJavascriptBridge(callback) {
? ? ? if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
? ? ? if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
? ? ? window.WVJBCallbacks = [callback];
? ? ? var WVJBIframe = document.createElement('iframe');
? ? ? WVJBIframe.style.display = 'none';
? ? ? WVJBIframe.src = 'https://__bridge_loaded__';
? ? ? document.documentElement.appendChild(WVJBIframe);
? ? ? setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
}```
2.2 app端
(1)攔截了所有的 URL 請求并拿到 url
(2)^^^
(3)繼續(xù)判斷,如果是isBridgeLoadedURL,那么會執(zhí)行injectJavascriptFile方法,會向 webview 中再次注入一些邏輯,其中最重要的邏輯就是,在 window 對象上掛載一些全局變量和WebViewJavascriptBridge屬性
(4)繼續(xù)判斷,如果是 isQueueMessageURL,那么這就是個處理消息的回調(diào),需要執(zhí)行一些消息處理的方法