HarmonyOS 鸿蒙Next代码片段分享-如何实现混合开发的离线包

发布于 1周前 作者 vueper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next代码片段分享-如何实现混合开发的离线包

封装 ArkWeb

import { webview } from ‘@kit.ArkWeb’;
import JsBridge from ‘./JsBridge’;

@Component struct Index { controller: webview.WebviewController = new webview.WebviewController(); @Prop src: string | Resource = ‘’; @Prop isOffline: boolean = true; @State jsBridge: JsBridge = new JsBridge();

aboutToAppear() { // 配置Web开启调试模式 webview.WebviewController.setWebDebuggingAccess(true); }

getMimeType(filePath: string) { let mimeType = ‘’; if (filePath.endsWith(’.html’)) { mimeType = ‘text/html’; } else if (filePath.endsWith(’.css’)) { mimeType = ‘text/css’; } else if (filePath.endsWith(’.js’)) { mimeType = ‘application/javascript’; } else if (filePath.endsWith(’.svg’)) { mimeType = ‘image/svg+xml’; } else if (filePath.endsWith(’.png’)) { mimeType = ‘image/png’; } else if (filePath.endsWith(’.jpg’)) { mimeType = ‘image/jpeg’; } else if (filePath.endsWith(’.map’)) { mimeType = ‘application/js’; } else if (filePath.endsWith(’.json’)) { mimeType = ‘application/json’; } else if (filePath.endsWith(’.png’)) { mimeType = ‘image/png’; } else if (filePath.endsWith(’.bin’)) { mimeType = ‘application/octet-stream’; } else if (filePath.endsWith(’.wasm’)) { mimeType = ‘application/wasm’; }

<span class="hljs-keyword"><span class="hljs-keyword">return</span></span> mimeType

}

build() { Web({ src: this.src, controller: this.controller }) .domStorageAccess(true) .javaScriptProxy({ object: this.jsBridge, name: ‘jsBridge’, methodList: this.jsBridge.methodList, controller: this.controller }) .onInterceptRequest(this.isOffline ? event => { const rawFilePath = event.request.getRequestUrl().replace(http://localhost/, ‘’) const webResourceResponse = new WebResourceResponse(); webResourceResponse.setResponseEncoding(“UTF-8”); webResourceResponse.setResponseCode(200); webResourceResponse.setResponseData($rawfile(rawFilePath)); webResourceResponse.setResponseMimeType(this.getMimeType(rawFilePath)); return webResourceResponse; } : undefined)

} }

export default Index;<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>

使用 

import WebContainer from ‘…/components/WebContainer’;

@Entry @Component struct Index { @State message: string = ‘Hello World’;

build() { RelativeContainer() { WebContainer({ src: http://localhost/index.html, isOffline: true, }) } .height(‘100%’) .width(‘100%’) } }<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>


更多关于HarmonyOS 鸿蒙Next代码片段分享-如何实现混合开发的离线包的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next代码片段分享-如何实现混合开发的离线包的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中实现混合开发的离线包,你需要确保应用具有从本地或服务器下载并加载资源的能力。这通常涉及使用HarmonyOS的FileProvider来管理文件访问权限,并利用WebView或其他UI组件来加载本地的HTML、CSS、JavaScript等资源。同时,你可以通过DownloadManager或自定义网络请求来下载离线包。

在代码层面,确保离线包文件路径正确设置,并在WebView中使用loadFileUrl等方法来加载本地路径。对于大型项目,还需考虑资源的解压缩与版本管理。

如果问题依旧没法解决请加我微信,我的微信是itying888。

更多关于HarmonyOS 鸿蒙Next代码片段分享-如何实现混合开发的离线包的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


回到顶部