hybrid-bridge-js
Version:
A JavaScript bridge for communication between Web and Native (iOS/Android)
128 lines (96 loc) • 3.07 kB
Markdown
一个用于 Web 和原生应用(iOS/Android)之间通信的 JavaScript 桥接库。
[](./README.md) | 简体中文
```bash
yarn add hybrid-bridge-js
```
```javascript
import JSBridge from 'hybrid-bridge-js'
// 调用原生方法
JSBridge.invoke('nativeMethod', { param: 'value' })
.then((result) => {
console.log('Native 返回结果:', result)
})
.catch((error) => {
console.error('错误:', error)
})
// 注册 H5 方法供原生调用
JSBridge.register('webMethod', (data, callback) => {
console.log('收到来自原生的数据:', data)
callback({ success: true })
})
```
调用原生方法。
注册 H5 方法供原生调用。
接收原生方法的回调结果。
供原生调用已注册的 H5 方法。
```javascript
import { onMounted } from 'vue'
import JSBridge from 'hybrid-bridge-js'
onMounted(() => {
JSBridge.register('getUser', (data, callback) => {
console.log('Native 调用 H5 getUser 方法,参数:', data)
callback({
userId: 12345,
nickname: '张三',
token: 'abcd1234xyz'
})
})
})
```
```javascript
import { useEffect } from 'react'
import JSBridge from 'hybrid-bridge-js'
useEffect(() => {
JSBridge.register('getUser', (data, callback) => {
console.log('Native 调用 H5 getUser 方法,参数:', data)
callback({
userId: 12345,
nickname: '张三',
token: 'abcd1234xyz'
})
})
}, [])
```
```swift
class WebViewController: UIViewController, WKScriptMessageHandler {
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "getAccessToken" {
let callbackId = (message.body as? [String: Any])?["callbackId"] as? String ?? ""
let accessToken = "abcdef123456"
webView.evaluateJavaScript("JSBridge.receive('\(callbackId)', '\(accessToken)')", nil)
}
}
}
```
```java
class JSBridgeInterface {
@JavascriptInterface
public void getAccessToken(String json) {
try {
JSONObject obj = new JSONObject(json);
String callbackId = obj.getString("callbackId");
String accessToken = "abcdef123456";
String jsCode = "JSBridge.receive('" + callbackId + "', '" + accessToken + "')";
webView.post(() -> webView.evaluateJavascript(jsCode, null));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
```
MIT