English README | 更新日志 |
参考 WKWebViewJavascriptBridge 实现的 Android 平台 Js 桥接库,尽可能保持了和 WKWebViewJavascriptBridge 相同的 api,支持自定义桥接名称,并且没有与 WebView 强行耦合,更像是对 WebView 能力的增强。
repositories {
mavenCentral()
}
implementation("io.github.rdsunhy:component-jsbridge:lastest")val bridgeHandler: IBridgeHandler = JsBridgeHandler() bridgeHandler.attach(webView) // 当 view 销毁时调用 bridgeHandler.detach() // 支持自定义桥接名称 WebJsBridge.setBridgeName("YourCustomName") // 默认: WKWebViewJavascriptBridge
// 原生层注册方法供 js 调用 bridgeHandler.registerBridger("NativeBridgeMethodName") { data, callback -> // todo } // 原生层调用 js 提供的方法 bridgeHandler.callBridger("JsBridgeMethodName", data) { response -> // todo }
function setupWebViewJsBridge(callback) { let isAndroid = Boolean(navigator.userAgent.match(/android/ig)); let isIOS = Boolean(navigator.userAgent.match(/iphone|ipod|iOS/ig)); if (window.WKWebViewJavascriptBridge) { return callback(window.WKWebViewJavascriptBridge); } if (window.WKWVJBCallbacks) { window.WKWVJBCallbacks.push(callback); } else { window.WKWVJBCallbacks = [callback]; } if (isAndroid) { // 对比 ios 平台的 WKWebViewJavascriptBridge 库这里需要区分一下 Android 平台 if (!window.InjectJavascript) { window.alert("ERROR: window.InjectJavascript if null!"); return; } window.InjectJavascript.init(); } else if (isIOS) { window.webkit.messageHandlers.iOS_Native_InjectJavascript.postMessage(null); } }
// js 层注册桥接方法 setupWebViewJsBridge(function(bridge) { bridge.registerHandler("JsBridgeMethodName", function(data, callback) { // todo let response = { "msg": "invoke success" } callback(response) // 支持回调 }) }) // js 层调用原生提供的方法 setupWebViewJsBridge(function(bridge) { bridge.callHandler("NativeBridgeMethodName", params, function(data) { // todo let response = JSON.parse(data) }) })