跳至主要内容

WebView 是什麼?從零開始認識 WebView

適合對象:網頁初學者、剛接觸 App 開發的前端工程師


一、先從一個生活例子說起

你有沒有發現,在 LINE 或 Facebook App 裡點開一個網址連結,畫面會直接在 App 內顯示網頁,而不是跳去開啟 Chrome 或 Safari?

那個「在 App 內顯示網頁的視窗」,就叫做 WebView

簡單來說:

WebView = 內嵌在 App 裡的瀏覽器


二、WebView 到底是什麼?

WebView 是一個元件(Component),讓原生 App(Android 或 iOS)可以直接在畫面裡顯示網頁內容。

你可以把它想像成:

原生 App
└── WebView(一個視窗)
└── 顯示 HTML / CSS / JavaScript 網頁

開發者可以在這個視窗裡載入:

  • 一個網址(URL),例如 https://example.com
  • 或直接載入本地的 HTML 字串

三、WebView 的運作原理

WebView 底層其實就是用瀏覽器的「渲染引擎」來顯示網頁:

平台使用的引擎
AndroidChromium(基於 Chrome)
iOSWebKit(基於 Safari)

所以你在 WebView 裡寫的網頁,其實跟一般網頁差不多,只是「包在 App 的殼裡」。


四、WebView 的常見應用場景

📱 1. App 內嵌網頁

最常見的用途。例如電商 App 裡的「商品說明頁」、新聞 App 的「文章頁面」,都可以直接用 WebView 顯示網頁,不需要額外開發原生畫面。

🔄 2. 混合式 App(Hybrid App)

這是很多公司採用的開發方式。App 的「殼」是原生的,但裡面的內容是用網頁技術(HTML/CSS/JS)寫的,再用 WebView 顯示出來。

知名框架有:

  • Cordova / PhoneGap — 早期很流行
  • Ionic — 搭配 Angular / React / Vue 使用
  • Capacitor — Ionic 的現代版本

🌐 3. 登入頁面(OAuth)

很多 App 在「用 Google 帳號登入」時,會開一個 WebView 讓你輸入 Google 帳號密碼,這樣 App 本身就不需要自己處理登入邏輯。

📄 4. 顯示動態內容

如果你的 App 需要顯示常常更新的內容(例如:活動頁面、行銷頁面),用 WebView 載入網頁,就可以不更新 App 就改版內容。


五、WebView 的優點與缺點

✅ 優點

優點說明
跨平台同一套 HTML/CSS/JS 程式碼,Android 和 iOS 都能用
易於更新改網頁就好,不需要等 App 審核上架
前端工程師友善不需要學 Swift 或 Kotlin 就能做出 App 功能
節省開發成本一套程式碼走天下,人力需求少

❌ 缺點

缺點說明
效能較差比起純原生 App,流暢度和速度稍遜一籌
畫面表現有限複雜的動畫或特效,不如原生來得順暢
瀏覽器差異Android 和 iOS 的 WebView 行為不完全一樣,有時要額外處理相容問題
安全性風險若沒有做好設定,可能會有 JavaScript 注入等安全漏洞

六、前端工程師需要知道的事

如果你是前端工程師,在開發 WebView 頁面時,有幾件事要特別注意:

1. 和 App 溝通 — JavaScript Bridge

WebView 裡的網頁可以跟原生 App 互相「溝通」,這個機制叫做 JavaScript Bridge

舉例:

  • 網頁想呼叫手機的相機 → 透過 Bridge 呼叫原生功能
  • 原生 App 想傳資料給網頁 → 用 Bridge 執行 JS 函式
// 網頁端呼叫 App 提供的原生方法(範例)
window.NativeBridge.openCamera();

// App 呼叫網頁裡的函式(由 App 端執行)
webView.evaluateJavascript("onDataReceived('hello')", null);

2. User Agent 偵測

你可以在網頁裡偵測目前是否在 WebView 環境中:

const userAgent = navigator.userAgent;
const isWebView = /wv|WebView/i.test(userAgent);

if (isWebView) {
console.log('目前在 App 的 WebView 裡');
} else {
console.log('目前在一般瀏覽器');
}

3. 注意 viewport 設定

WebView 裡的網頁一定要加上 viewport meta tag,否則在手機上可能會縮成很小:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

4. 不支援某些瀏覽器 API

有些瀏覽器才有的功能(例如 navigator.share、某些 Web API),在 WebView 裡可能不支援,記得要做好備案處理。


七、React Native 和 Flutter 裡的 WebView

如果你用的是跨平台框架,也有對應的 WebView 元件可以使用:

React Native

npm install react-native-webview
import { WebView } from 'react-native-webview';

export default function App() {
return (
<WebView
source={{ uri: 'https://www.example.com' }}
style={{ flex: 1 }}
/>
);
}

Flutter

# pubspec.yaml
dependencies:
webview_flutter: ^4.0.0
WebViewWidget(
controller: WebViewController()
..loadRequest(Uri.parse('https://www.example.com')),
)

八、WebView vs 其他方案的比較

比較項目WebView原生 AppReact Native / Flutter
開發難度低(前端即可)高(需學原生語言)中(JS 或 Dart)
效能普通最好接近原生
更新彈性最高(改網頁即可)低(需上架審核)
使用原生功能需透過 Bridge完整支援大部分支援
適合情境內容型、行銷頁高效能、複雜互動中大型跨平台 App

九、小結

WebView 是一個非常實用的技術,特別適合:

  • 想快速把現有網頁「包成 App」
  • 內容常常更新,不想每次都重新上架
  • 團隊以前端為主,沒有原生 App 開發資源

雖然效能不如純原生,但在很多應用場景下,WebView 已經夠用,而且開發速度快、維護成本低。

對前端工程師來說,WebView 是一個很好的切入點,讓你的網頁技術可以延伸到 App 的世界!


延伸學習資源


本文章適合前端初學者閱讀,內容以概念說明為主。