目錄
web網頁和ios,android互動(原理)
首頁 web前端 前端問答 html5混合開發是什麼

html5混合開發是什麼

May 30, 2022 pm 04:26 PM
html html5

html5混合開發是指同時採用原生(程式語言)與H5(Web語言)技術來開發應用;混合開發是一種取長補短的開發模式,原生程式碼部分利用外掛程式或其它框架為H5提供容器,程式主要的業務實現、介面展示都是利用與H5相關的技術進行實現的。

html5混合開發是什麼

本教學操作環境:windows7系統、HTML5版、Dell G3電腦。

目前市場上主流的APP分為三種:原生APP、Web APP(即HTML5)和混合APP三種,相對應的定 制開發就是原生開發、H5開發和混合開發。

混合開發是什麼?

混合開發,是指在開發一款App產品的時候,為了提高效率、節省成本而利用原生與H5的開發技術的混合應用。通俗點來說,這就是網頁的模式,同時採用網頁語言和程式語言進行開發,通常由「H5雲端網站 APP應用程式客戶端」兩部組成。

混合開發是一種取長補短的開發模式,原生程式碼部分利用插件或其它框架為H5提供容器,程式主要的業務實作、介面展示都是利用與H5相關的技術進行實現的。許多APP都是利用混合開發模式而成的。

優點:

1、開發效率高,節省時間。同一套程式碼Android和IOS基本上都可以使用;

2、更新和部署比較方便,每次升級版本只需要在伺服器端升級即可,不再需要上傳到App Store進行審核;

3、程式碼維護方便、版本更新快,節省產品成本;

4、比web版實作功能多;

#5、可離線運作。

缺點:

1、功能/介面無法自訂:所有內容都是固定的,不能換介面或增加功能;

2 、載入緩慢/網路需求高:混合APP資料需要全部從伺服器調取,每個頁面都需要重新下載,因此開啟速度慢,網路佔用高,緩衝時間長,容易讓使用者反感;

# 3.安全性比較低:代碼都是以前的舊代碼,不能很好地兼容最新手機系統,且安全性較低,網絡發展這麼快,病毒這麼多,如果不實時更新,定期檢查,容易產生漏洞,造成直接經濟損失;

4、既懂原生開發又懂H5開發的高階人才難找。

混合APP原理

混合APP通常由前端負責大部分介面開發和業務邏輯,原生負責封裝原生功能供前端調用,二者以WebView 作為媒介建立通信,因此既擁有Web 開發的速度優勢,又能擁有強大的原生能力。

從一個前端開發者的角度來看,混合應用可以簡單地理解為讓前端頁面跑在一個特殊的瀏覽器環境裡,這個環境除了常規Web API之外,還額外提供了很多可以直接呼叫手機原生能力的API。

從一個原生開發者的角度來看,混合應用程式其實就是一個原生開發的App 外殼,這個外殼將原生功能封裝成很多API 並注入到WebView 裡,然後將前端頁面打包進App, App 啟動時用WebView 載入前端頁面,剩下的就全交給前端了。

web網頁和ios,android互動(原理)

#web網頁和ios,android互動(原理)

  • web網頁呼叫ios和android

  • web頁面發送一個假的請求, ios,android攔截請求,解析是真請求還是假請求

    • 真請求放行

    • #假請求攔截,解析出真實的功能需求字段,

    • 透過發布訂閱,傳遞給對應文件,做出相應的操作

#發送一個假請求,讓原生開發攔截(該加上請求的url路勁需要和ios,android設定的保持一致)
ios攔截請求

// 继承类MyURLProtocol,子类NSURLProtocol
// MyURLProtocol.h文件
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN
@interface MyURLProtocol: NSURLProtocol



@end
登入後複製
// MyURLProtocol.m文件
#import "MyURLProtocol.h"
@implementation MyURLProtocol

// 手机app是否可以加载请求
+ (BOOL)canInitWithRequest:(NSURLRequest *)request{
    
    //拦截到请求后,获取请求的字符串
    NSString *path = request.URL.absoluteString;
    
    // 判断字符串是否以协商好的虚假协议开头(如emma://开头)
    if([path hasPrefix:@"emma://"]){
        // 这是个假请求
        // 获取该请求真实目的
        NSString *action = [path substringFromIndex:7];
        
        // 该文件不能调用一些原生功能,需要装有webview的视图文件才行,所以要将该请求字段传给视图文件
        // 文件间不能通信,用发布订阅(ios自带一个发布订阅)
        if([action isEqualToString:@"captureImage"]){
            // 发送消息,拍照
            [[NSNotificationCenter defaultCenter] postNotificationName:@"captureImage" object:nil userInfo:nil];
        }
        
        // 拦截掉该请求
        return NO;
    } else {
        // 真请求
        // 允许该请求通过
        return YES;
    }
}
    
@end
登入後複製
// 装有webview的页面(文件)
#import "MyURLProtocol.h"

// 注册MyURLProtocol,可以实现拦截
[NSURLProtocol registerClass:[MyURLProtocol class]];

// 订阅消息,拍照的消息
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleCaptureImage) name:@"captureImage" object:nil];

// 订阅拍照消息的处理函数
-(void)handleCaptureImage{
    // 拍照的操作
}
登入後複製

html發送假請求

<!-- // HTML文件发送假请求 -->
<a href="emma://captureImage">拍照</a>
<a href="emma://openweChart">打开微信</a>
<a href="emma://scan">扫一扫</a>
登入後複製
// js文件发送假请求
window.location.href = &#39;emma://captureImage&#39;;
登入後複製

ios,android傳值給web網頁

先在網頁上準備一個獲得結果的回呼函數

當原生需要傳值給網頁時,向開啟網頁的視窗動態插入js程式碼,這段js程式碼就是呼叫回調函數的程式碼

web程式碼

import React, { useState } from &#39;react&#39;
function WebView() {
 const [image, setimage] = useState(&#39;&#39;);
 
 const btnAction = () => {
     // 发送一个假的请求,触发原生
      window.location.href = &#39;emma://captureImage&#39;;
      
      // 在window设置了一个回调方法(模块化开发,ios只能找到window全局作用域,所以只能挂在window上)
      window.onCaptureImageCallback = (value) => {
          setimage(value)
      }
 }
 
 return (
 	<div>
     	<button onClick={btnAction}>拍照</button>
         <img src={image} />
     </div>
 )
}
登入後複製

ios程式碼

// webview的文件
// 需要将webview提升成全局变量(挂载webview的函数和处理发布订阅事件的函数是两个作用域)
@property (strong, nonatomic) WKWebView *webview;

// 事件处理函数中
// 向窗口注入js代码
NSString *jsMethod = [NSString stringWithFormat:@"window.onCaptureImageCallback(&#39;%@&#39;)", @"需要传给网页的值"];
[self.webview evaluateJavaScript:jsMethod completionHandler:nil];
登入後複製

擴充功能知識:原生開發與Web APP (HTML5)開發的優缺點

原生開發

原生開發(Native App開發),是在Android、IOS等行動平台上利用官方提供的開發語言、開發類函式庫、開發工具進行App開發。例如Android是利用Java、Eclipse、Android studio;IOS就是利用Objective-C 和Xcode來開發。

通俗點來講,原生開發就像蓋房子一樣,先打地基然後澆地梁、房屋結構、一磚一瓦、鋼筋水泥、電路走向等,都是經過精心的設計。原生APP也是一樣:透過程式碼從每個頁面、每個功能、每個效果、每個邏輯、每個步驟全部用程式碼寫出來,一層層,一段段全用程式碼寫出來。

優點:

1、可存取手機所有功能(如GPS、相機等)、可實現功能最齊全;

2、運行速度快、效能高,絕佳的使用者體驗;

3、支援大量圖形和動畫,不卡頓,反應快;

4、相容性高,每個程式碼都經過程式設計師精心設計,一般不會出現閃退的情況,還能防止病毒和漏洞的出現;

5、比較快速地使用設備端提供的接口,處理速度上有優勢。

缺點:

1、開發時間長,快則3個月左右完成,慢則五個月左右;

2、製作費用高昂,成本較高;

3、可移植性比較差,一款原生的App,Android和IOS都要各自開發,同樣的邏輯、介面要寫兩套;

4、內容限制( App Store限制);

5、必須等下載完畢用戶才可以打開,取得新版本時需重新下載應用程式更新。

Web APP (HTML5)開發

HTML5應用程式開發,是利用Web技術進行的App開發,可以在手機端瀏覽器裡面開啟的網站就稱之為webapp。 Web技術本身需要瀏覽器的支援才能進行展示和使用者交互,因此主要用到的技術是HTML、CSS、Javascript以及jQuery、Vue、React等JS框架。

優點:

1、支援裝置範圍廣,可以跨平台,編寫的程式碼可以同時在Android、IOS、Windows上運作;

2、開發成本低、週期短;

3、無內容限制;

4、適合展示有大段文字(如新聞、攻略等),且格式較豐富(如加粗,字體多樣)的頁面;

5、使用者可以直接使用最新版本(自動更新,不需要使用者手動更新)。

缺點:

1、由於Web技術本身的限制,H5行動應用無法直接存取設備硬體和離線存儲,所以在體驗和效能上有很大的限制;

2、對網路需求高,離線不能做任何操作;

3、功能有限;

4、APP反應速度慢,頁面切換流暢度較差;

5、圖片和動畫支援性不高;

6、使用者體驗感較差;

7、無法呼叫手機硬體(相機、麥克風等)。

相關推薦:《html影片教學

以上是html5混合開發是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

HTML 中的表格邊框 HTML 中的表格邊框 Sep 04, 2024 pm 04:49 PM

HTML 表格邊框指南。在這裡,我們以 HTML 中的表格邊框為例,討論定義表格邊框的多種方法。

HTML 中的巢狀表 HTML 中的巢狀表 Sep 04, 2024 pm 04:49 PM

這是 HTML 中巢狀表的指南。這裡我們討論如何在表中建立表格以及對應的範例。

HTML 左邊距 HTML 左邊距 Sep 04, 2024 pm 04:48 PM

HTML 左邊距指南。在這裡,我們討論 HTML margin-left 的簡要概述及其範例及其程式碼實作。

HTML 表格佈局 HTML 表格佈局 Sep 04, 2024 pm 04:54 PM

HTML 表格佈局指南。在這裡,我們詳細討論 HTML 表格佈局的值以及範例和輸出。

HTML 輸入佔位符 HTML 輸入佔位符 Sep 04, 2024 pm 04:54 PM

HTML 輸入佔位符指南。在這裡,我們討論 HTML 輸入佔位符的範例以及程式碼和輸出。

HTML 有序列表 HTML 有序列表 Sep 04, 2024 pm 04:43 PM

HTML 有序列表指南。在這裡我們也分別討論了 HTML 有序列表和類型的介紹以及它們的範例

HTML onclick 按鈕 HTML onclick 按鈕 Sep 04, 2024 pm 04:49 PM

HTML onclick 按鈕指南。這裡我們分別討論它們的介紹、工作原理、範例以及各個事件中的onclick事件。

在 HTML 中移動文字 在 HTML 中移動文字 Sep 04, 2024 pm 04:45 PM

HTML 中的文字移動指南。在這裡我們討論一下marquee標籤如何使用語法和實作範例。

See all articles