鴻蒙搭配前端開發:應用端與WEB端交互

鴻蒙系統(HarmonyOS)是華為開發的一款面向全場景的分布式操作系統,其設計初衷是為了適應物聯網時代的需求,旨在構建一個統一的操作系統,支持多種設備的無縫協同工作。其分布式開發的一些主要優勢:

  1. 跨設備協同: 鴻蒙系統支持跨設備的分布式軟總線技術,使得不同類型的設備能夠像一臺設備一樣協同工作,實現資源共享和服務遷移。

  2. 一次開發多端部署: 開發者可以使用一套代碼庫開發出能在不同設備上運行的應用程序,這大大減少了開發成本和維護復雜度。這種“寫一次,到處運行”的能力提高了開發效率。

  3. 靈活的模塊化設計: 鴻蒙應用可以被拆分成多個可獨立部署的服務模塊(Ability),每個模塊可以根據需要部署在不同的設備上。這樣的模塊化設計有助于實現按需加載和服務的動態組合。

  4. 強大的安全機制: 鴻蒙系統內置了多層次的安全機制,包括設備認證、數據加密、權限控制等,確保設備間的通信安全以及用戶數據的安全。

  5. 高性能的通信能力: 利用鴻蒙系統的分布式軟總線技術,設備間的通信延遲更低,數據傳輸速度更快,為用戶提供更加流暢的體驗。

  6. 低功耗優化: 針對物聯網設備的特點,鴻蒙系統特別優化了功耗管理,能夠在保證用戶體驗的同時延長設備的續航時間。

下面,給友友們分享鴻蒙開發中應用端與WEB段交互的手段-通過特定的API暴露給Web頁面一些原生的能力。

WEB組件加載頁面

頁面加載是Web組件的基本功能。根據頁面加載數據來源可以分為三種常用場景,包括加載網絡頁面、加載本地頁面、加載HTML格式的富文本數據。本次分享主要是加載網路頁面,涉及網絡資源的獲取,首先要配置ohos.permission.INTERNET網絡訪問權限。

  • @ohos.web.webview模塊為網頁控制提供 API,它用于顯示網頁。
  • 通過WebviewController可以控制Web組件各種行為。一個WebviewController對象只能控制一個Web組件,且必須在Web組件和WebviewController綁定后,才能調用WebviewController上的方法(靜態方法除外)。
  • Web組件支持使用DevTools工具調試前端頁面。DevTools是一個 Web前端開發調試工具,提供了電腦上調試移動設備前端頁面的能力。開發者通過setWebDebuggingAccess()接口開啟Web組件前端頁面調試能力,利用DevTools工具可以在電腦上調試移動設備上的前端網頁,設備需為4.1.0及以上版本。
  • web({ src: "? ". controller: tis.controller })設置了加載頁面的url
  • domStorageAccess(domStorageAccess: boolean)
  • 設置是否開啟文檔對象模型存儲接口(DOM Storage API)權限,默認未開啟。
  • fileAccess(fileAccess: boolean)
  • 設置是否開啟應用中文件系統的訪問,默認啟用。$rawfile(filepath/filename)中rawfile路徑的文件不受該屬性影響而限制訪問。
  • javaScriptAccess(javaScriptAccess: boolean)
  • 設置是否允許執行JavaScript腳本,默認允許執行。
  • mixedMode(mixedMode: MixedMode)
  • 設置是否允許加載超文本傳輸協議(HTTP)和超文本傳輸安全協議(HTTPS)混合內容,默認不允許加載HTTP和HTTPS混合內容。
  • 使用當前窗口實例,便于后期調用接口。
// xxx.ets
import web_webview from '@ohos.web.webview';
import business_error from '@ohos.base';
import window from '@ohos.window'@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController();build() {Column() {aboutToAppear() {// 設置不顯示導航欄和狀態欄window.getLastWindow(this.context).then((data) => {data.setWindowSystemBarEnable([]).then(() => {LogUtil.debug('Succeeded in setting the system bar to be invisible.');});});// 配置Web開啟調試模式web_webview.WebviewController.setWebDebuggingAccess(true);}// 組件創建時,加載www.example.comWeb({ src:"http://10.1.1.12:8989/", controller: this.controller }).javaScriptAccess(true).fileAccess(true).domStorageAccess(true).mixedMode(MixedMode.All)}}
}

WEB端調用應用端函數

開發者使用Web組件將應用側代碼注冊到前端頁面中,注冊完成之后,前端頁面中使用注冊的對象名稱就可以調用應用側的函數,實現在前端頁面中調用應用側方法。

注冊應用側代碼有兩種方式,一種在Web組件初始化調用,使用javaScriptProxy()接口。另外一種在Web組件初始化完成后調用,使用registerJavaScriptProxy()接口。

下面講解使用registerJavaScriptProxy()接口的方法:

  • javaScriptProxy()用于注入JavaScript對象到window對象中,并在window對象中調用該對象的方法。所有參數不支持更新。此接口只支持注冊一個對象,若需要注冊多個對象請使用registerJavaScriptProxy()
  • registerJavaScriptProxy提供了應用與Web組件加載的網頁之間強大的交互能力。
  • 注入JavaScript對象到window對象中,并在window對象中調用該對象的方法。注冊后,須調用refresh接口生效。
// xxx.ets
import web_webview from '@ohos.web.webview';
import business_error from '@ohos.base';
import { GetTest } from '../common/GetTest';@Entry
@Component
struct WebComponent {controller: web_webview.WebviewController = new web_webview.WebviewController();build() {Column() {aboutToAppear() {// 配置Web開啟調試模式web_webview.WebviewController.setWebDebuggingAccess(true);}// 組件創建時,加載www.example.comWeb({ src:"http://10.1.1.12:8989/", controller: this.controller }).javaScriptAccess(true).fileAccess(true).domStorageAccess(true).mixedMode(MixedMode.All)}}
private registerJavaScript() {// TODO 如何將多個對象注入到同一個window對象中let getTest = new GetTest()this.controller.registerJavaScriptProxy(getTest, "getTest", ["say"])this.controller.refresh()}
}
<!-- index.html -->
<!DOCTYPE html>
<html>
<body>
<button type="button" onclick="callArkTS()">Click Me!</button>
<p id="demo"></p>
<script>function callArkTS() {let str = window.getTest.say();document.getElementById("demo").innerHTML = str;console.info('ArkTS Hello World! :' + str);}
</script>
</body>
</html>

此時在前端頁面中就可以看到打印內容啦。


更新!2025.02.24

鴻蒙ArkTS代碼實現原生功能注入到Vue前端的原理詳解:

通過?ArkTS Web組件?創建混合應用框架,利用?JavaScript橋接?技術實現原生能力注入。整體流程為:

鴻蒙原生能力 → 通過JS橋接注入 → Webview全局對象 → Vue組件調用

注冊JS代理
private registerJavaScript() {let getTest = new GetTest()this.controller.registerJavaScriptProxy(getTest,        // 原生對象實例"getTest",      // 注入到window的對象名["say"]         // 暴露的方法白名單)this.controller.refresh() // 重新加載使注入生效
}

這是橋接實現的核心方法,關鍵參數說明:

  • getTest:封裝了say()等原生方法的ArkTS類實例

  • "getTest":將對象掛載到Webview的window.getTest

  • ["say"]:僅暴露指定方法,保證安全性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97884.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97884.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97884.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

配置sscms時被sql server處處刁難

今天要記下來的是一個小例子。接前面&#xff0c;當我終于完成sql server的安裝時&#xff0c;才發現要填寫sscms的兩個空是有多么艱難。首先安裝sql server2016出現了太多環境不兼容的問題&#xff0c;讓我只好退而安裝sql server2012。安裝sql server2012時其實是可以避坑的&…

【Flink】DataStream API:源算子、數據類型

目錄源算子&#xff08;Source&#xff09;從集合中讀取數據從文件讀取數據從Socket讀取數據從Kafka讀取數據從數據生成器讀取數據Flink支持的數據類型Flink的類型系統Flink支持的數據類型類型提示&#xff08;Type Hints&#xff09;源算子&#xff08;Source&#xff09; Fli…

Linux 安裝docker-compose安裝方法(安裝docker compose安裝)

文章目錄**方法一&#xff1a;通過 curl 下載二進制文件&#xff08;推薦&#xff09;**1. 安裝前準備- **確保已安裝 Docker**- **檢查 Docker 是否安裝成功**2. 下載并安裝 Docker Compose- **下載最新版本的 Docker Compose 二進制文件**- **國內加速下載&#xff08;解決 G…

OCR 發票識別與驗真接口:助力電子化發票新時代

自 2025 年 10 月 1 日起&#xff0c;紙質火車票徹底告別歷史舞臺&#xff0c;全面數字化的電子發票取而代之&#xff0c;這一變革標志著票務領域的重大革新&#xff0c;也讓電子化發票處理的需求呈井噴式增長。在此背景下&#xff0c;OCR 發票識別和發票驗真接口技術挺身而出&…

設計模式:抽象工廠模式(Abstract Factory Pattern)

文章目錄一、概念二、實例分析三、完整示例一、概念 抽象工廠模式是一種創建型設計模式。 提供一個接口用于創建一系列相關或相互依賴的對象&#xff0c;而無需指定它們的具體類。 相比于工廠方法模式&#xff0c;抽象工廠模式不僅僅是創建單一產品&#xff0c;而是一族產品&am…

輕量級注意力模型HOTSPOT-YOLO:無人機光伏熱異常檢測新SOTA,mAP高達90.8%

【導讀】 無人機光伏巡檢如何更智能、更高效&#xff1f;HOTSPOT-YOLO模型給出了亮眼答案&#xff01;給AI裝上“熱成像鷹眼”&#xff0c;能精準鎖定光伏板上的細微熱斑缺陷。它不僅將檢測精度&#xff08;mAP&#xff09;提升至90.8%&#xff0c;更在保持實時性的前提下大幅…

CHT共軛傳熱: 導熱系數差異如何影響矩陣系數

文章目錄 一、導熱系數差異如何影響矩陣系數&#xff1f;二、如何處理系數差異以加速收斂&#xff1f;1. **變量重縮放&#xff08;Scaling of Variables&#xff09;**2. **使用物理型預條件子&#xff08;Physics-based Preconditioning&#xff09;**3. **區域分解法&#x…

Vue Vapor 事件機制深潛:從設計動機到源碼解析

基于 vue3.6&#xff08;alpha 階段&#xff09;及 Vapor 的最新進展撰寫&#xff1b;Vapor 仍在演進中&#xff0c;部分實現可能繼續優化。TL;DR&#xff08;速覽&#xff09; 傳統&#xff08;≤3.5&#xff09;&#xff1a;事件以元素為中心綁定&#xff1b;每個元素用 el._…

Day 01(01): Hadoop與大數據基石

目標&#xff1a;建立對大數據生態的整體認知&#xff0c;理解HDFS和MapReduce的核心思想。 8:00-9:30&#xff1a;【視頻學習】在B站搜索“Hadoop入門”或“三小時入門大數據”&#xff0c;觀看1-2個高播放量的簡介視頻&#xff0c;了解大數據面臨的問題和Hadoop的解決方案。 …

開源 + 免費!谷歌推出 Gemini CLI,Claude Code 的強勁對手

在如今飛速發展的 AI 工具生態中&#xff0c;命令行界面&#xff08;CLI&#xff09;這一開發者與計算機交互的傳統方式&#xff0c;正悄然發生著一場顛覆性的變革。2025 年 6 月 25 日&#xff0c;谷歌正式發布開源的 Gemini CLI&#xff0c;這一舉措標志著谷歌 Gemini AI 能力…

MacOS - 記錄MacOS發燙的好幾天 - 幕后黑手竟然是

MacOS - 記錄MacOS發燙的好幾天 - 幕后黑手竟然是 Mac是不可能出bug的&#xff0c;一定是世界出bug了。 前言 幾天前Mac突然開始燙燙的&#xff0c;就這么一燙燙了好幾天。這可不行&#xff0c;所以看了下“活動監視器”&#xff0c;發現了一個Code Helper(Plugin)占據200%上下…

Vue基礎知識-Vue中:class與:style動態綁定樣式

完整源碼<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><script src&quo…

終于趕在考試券過期前把Oracle OCP證書考下來了!

&#x1f6a9; 今天終于能松口氣了——Oracle OCP證書到手&#xff01; 差點白白浪費一次考試機會&#xff08;1700&#xff09;&#xff01;3月底報名了Oracle OCP&#xff0c;擺爛了大半年&#xff0c;終于是逼著自己在考試券過期前考完了082和083科目&#xff0c;目前已經順…

Power BI學習筆記-周報銷售數據分析

Power BI學習筆記-周報銷售數據分析 簡介 來自B站的Power BI學習視頻的學習筆記。 記錄來自B站的Power BI教學視頻&#xff0c;由“高級財務BP-Ni”發布&#xff0c;視頻發布者主要發布財務類相關的PBI視頻&#xff0c;視頻長度30分鐘左右。 視頻鏈接&#xff1a; 【powerbi周報…

Oracle 數據庫與操作系統兼容性指南

前言 作為一個在 Oracle 坑里摸爬滾打多年的老 DBA&#xff0c;最怕聽到的就是"這個版本能不能裝在這個系統上&#xff1f;"這種問題。昨天又有朋友來問我 Oracle 數據庫和操作系統的兼容性&#xff0c;索性把這些年積累的官方兼容性列表整理出來&#xff0c;省得大家…

pytorch初級

本文章是本人通過讀《Pytorch實用教程》第二版做的學習筆記&#xff0c;深度學習的核心部分&#xff1a;數據準備 ?? 模型構建 ?? 模型訓練 ?? 模型評估與應用。根據上面的思路&#xff0c;我們分為幾個部分&#xff1a; 第一部分&#xff1a;PyTorch 基礎 - 涵蓋了從基本…

UniApp 混合開發:Plus API 從基礎到7大核心場景實戰的完整指南

在 UniApp 混合開發中&#xff0c;plus API 是連接前端代碼與原生設備能力的核心橋梁。基于 5 Runtime&#xff0c;它封裝了設備硬件、系統交互、網絡通信等近百種原生能力&#xff0c;解決了 UniApp 跨端 API 覆蓋不足的問題。但直接使用 plus API 常面臨兼容性復雜、回調嵌套…

本周難點問題詳細總結

&#x1f4cb; 本周技術問題總結 &#x1f534; 1. 表單校驗與用戶體驗 1.1 表單錯誤提示不規范 問題&#xff1a;校驗失敗時缺少頁面標識位置&#xff1a;SupplierForm.vue:375代碼示例&#xff1a;message.error([基本信息] 表單校驗失敗&#xff0c;請檢查必填字段)影響&…

下一代自動駕駛汽車系統XIL驗證方法

摘要自動駕駛汽車測試仍是一個新興且尚未成熟的過程&#xff0c;全球統一的測試流程尚需時日。實車測試對資源要求極高&#xff0c;因此開發并提升基于虛擬環境的測試方法的效率至關重要。有鑒于此&#xff0c;本文提出一種新穎的 X-in-the-Loop&#xff08;XIL&#xff0c;X 代…

視頻數據如何聯網共享?

視頻數據如何聯網共享&#xff1f; 視頻聯網共享系統&#xff0c;實現前端設備的接入管理以及接入數據的獲取。前端設備包括視頻設備、卡口設備、Wifi數據采集設備、移動采集設備以及GPS/北斗數據采集設備等。系統實現海量視頻數據的快速檢索&#xff0c;并為上層數據應用提供視…