跨端开发方案 跨端的意义:降低开发成本、提升效率;提供一致的使用体验;打造优良的前端开发生态 容器:
- webview:及时更新;native通信
- 小程序:以webview为渲染层,采用双线程多webview架构,以Native转发进行数据通信
- RN/Weex:以原生组件渲染,采用React/vue框架,JSBridge位于原生API和virtual dom之间
- Lynx:Vue->JS Core/V8 -> Renderer <-> Native UI
- Flutter:支持dart开发,Google提供
工程代码示例
JSBridge 用于在网页和本地应用程序之间进行通信。使用 JavaScript 代码,可调用本地应用程序提供的功能,并将数据从本地应用程序发送到网页。典型的例如WeiXinJSBridge;可用于通知、广告、产品详情等场景。
JSBridge 使用 JavaScript 与 Java 或 Objective-C 等原生语言之间的过渡代码来实现通信。在网页中,开发人员可以使用 JavaScript 代码调用本地应用程序提供的 API,这些 API 可以访问设备硬件、调用摄像头、发送本地通知和其他功能。反过来,本地应用程序可以使用 JSBridge 向网页发送数据,以便根据本地应用程序的操作更新网页内容。
JSBridge 促进了网页和本地应用程序之间的丝滑集成,允许开发人员利用网络技术创建跨平台移动应用程序,同时仍可访问本地应用程序提供的特定功能
简易JSBridge代码如下:
interface CallArgs {
callId: string// 调用Id ,雕一标识
module: string // 调用模块
method: string // 调用方法
data: any // @欧}
const Callbacks = {} // 存放回调函欧 callId 为key
function applyNative = (payload:CallArgs,callback:Function)=>{
const callId = prefix + callTime++
Callbacks[callId] = callback
const Args0: CallArgs = {
callId: callId,
module: payload.module || "Layout",
method: payload.method || "randomSize" ,
data: payload.data ,
}
if(IOS){
return window.webkitURL.messageHandler.postMessage(JSON,stringify(Args0))
}else{
// Android 对 window 上约定的对象进行拦截
return window.AndroidBridge(JSON .stringify(Argse))
}