Hybrid混合开发:原生壳里跑网页

Hybrid 的核心思想是:外面是原生壳,里面跑网页。前端代码运行在 WebView 里,通过一种叫 JSBr…

#Hybrid

Hybrid(混合)开发在移动端里指的是:原生 App + Web 技术(HTML / CSS / JS)一起用。App 本身是用 iOS / Android 原生写的,但其中一部分页面不是原生页面,而是放在 App 里的 WebView 中运行的网页,这些网页通常就是前端用 Vue / React 写的 H5 页面。

Hybrid 的核心思想是:外面是原生壳,里面跑网页。前端代码运行在 WebView 里,通过一种叫 JSBridge 的机制,和原生代码互相通信,从而调用原生能力,比如相机、扫码、定位、支付、打开原生页面、获取设备信息等。对前端来说,本质还是写 Web,只是运行环境从浏览器变成了 App 的 WebView。

之所以用 Hybrid,是因为它在效率和能力之间做了折中:相比纯 H5,它能用到更多原生能力、体验更接近 App;相比纯原生开发,它可以一套代码同时跑在 iOS 和 Android 上,开发和迭代速度快,很多业务页面甚至不用发版就能更新。

需要注意的是,Hybrid 页面本质仍然是网页,性能和体验通常不如完全原生,但在“业务页面、活动页、列表页、配置类页面”这类场景非常常见。它也和 React Native、Flutter 不一样,Hybrid 用的是真正的 WebView 和 DOM,而 RN / Flutter 渲染的是类原生组件,不是网页。对前端来说,Hybrid 的关键就是 JS 调原生、原生调 JS

一个最简单的 JS 调原生示例(概念版):

js
// JS 调用原生方法
window.NativeBridge.openCamera({
  quality: 80,
  success(imgUrl) {
    console.log('拍照结果:', imgUrl)
  },
  fail(err) {
    console.error(err)
  }
})

原生调用 JS 的常见形式(WebView 里暴露给原生):

js
// 给原生调用的全局方法
window.onLoginSuccess = function (userInfo) {
  console.log('原生登录成功', userInfo)
}

在真实项目里,通常会再包一层,避免直接用 window,比如:

js
export function openCamera() {
  return new Promise((resolve, reject) => {
    window.NativeBridge.openCamera({
      success: resolve,
      fail: reject
    })
  })
}

一句话记忆:Hybrid 页面本质是 Web,能力靠 JSBridge 补齐;代码看起来像前端,但运行在 App 里。

评论

评论加载中……