成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

HarmonyOS - JavaUI 框架之使用WebView加載本地H5頁面

系統 OpenHarmony
WebView 是一個基于 webkit 引擎、展現 web 頁面的控件,可以顯示和渲染web頁面,相當于應用中的瀏覽器,可以加載網絡上或應用本地的HTML文件。

??想了解更多內容,請訪問:??

??51CTO OpenHarmony技術社區??

??https://ost.51cto.com??

前言

現在應用開發中都不可避免的需要加載一些H5頁面。HarmonyOS應用通過 WebView 來提供應用中集成H5頁面的能力。在HarmonyOS應用中,出于安全考慮,WebView不支持直接通過File協議加載資源文件或本地文件,所以不能直接通過文件的存放路徑,加載本地H5頁面,下面介紹一下在HarmonyOS應用中,如何實現加載本地H5頁面。

WebView使用介紹

WebView 是一個基于 webkit 引擎、展現 web 頁面的控件,可以顯示和渲染web頁面,相當于應用中的瀏覽器,可以加載網絡上或應用本地的HTML文件。

WebView的能力:

  • 顯示和渲染 Web 頁面。
  • 直接使用 HTML文件(網絡上或本地 resources 中)作布局。
  • 可和 JavaScript 交互調用。

效果展示:

實現步驟:

1. 首先在resources目錄下創建rawfile文件夾,該目錄下的資源會打包進應用內。

2.將H5頁面放到entry/src/main/resources/rawfile文件夾下。

3.WebView 要訪問本地 Web 文件,需要通過DataAbility 的方式進行訪問,這里創建一個 WebAbility.java 文件。

在WebAbility中進行本地資源文件的解析,重寫 RawFileDescriptor(),獲取到我們解析到的RawFileDescriptor對象,RawFileDescriptor可以看作是我們訪問HarmonyOS應用本地資源文件的入口,通過該入口可以將我們的H5頁面加載到WebView控件上。

注意:private static final String ENTRY_PATH_PREFIX = “entry/resources” 這里將 “entry” 替換成自己對應modul的路徑。

public class WebAbility extends Ability {
private static final String PLACEHOLDER_RAW_FILE = "/rawfile/";
private static final String PLACEHOLDER_LOCAL_FILE = "/local/";
private static final String ENTRY_PATH_PREFIX = "entry/resources";
@Override
public RawFileDescriptor openRawFile(Uri uri, String mode) throws FileNotFoundException {
final int splitChar = '/';
if (uri == null) {
throw new FileNotFoundException("Invalid Uri");
}
// 獲取uri對應的資源路徑 例如:com.example.dataability/entry/resources/rawfile/
String path = uri.getEncodedPath();
final int splitIndex = path.indexOf(splitChar, 1);
if (splitIndex < 0) {
throw new FileNotFoundException("Invalid Uri " + uri);
}
// 處理不同路徑下的資源文件
String targetPath = path.substring(splitIndex);
if (targetPath.startsWith(PLACEHOLDER_RAW_FILE)) {
// 打開entry/resources/rawfile目錄下的資源
try {
return getResourceManager().getRawFileEntry(ENTRY_PATH_PREFIX + targetPath).openRawFileDescriptor();
} catch (IOException e) {
throw new FileNotFoundException("Not found support raw file at " + uri);
}
} else if (targetPath.startsWith(PLACEHOLDER_LOCAL_FILE)) {
// 打開手機本地存儲目錄下的資源
File file = new File(getContext().getFilesDir(), targetPath.replace(PLACEHOLDER_LOCAL_FILE, ""));
if (!file.exists()) {
throw new FileNotFoundException("Not found support local file at " + uri);
}
return getRawFileDescriptor(file, uri);
} else {
throw new FileNotFoundException("Not found support file at " + uri);
}
}
//獲取手機本地存儲目錄下文件資源的訪問入口
private RawFileDescriptor getRawFileDescriptor(File file, Uri uri) throws FileNotFoundException {
try {
final FileDescriptor fileDescriptor = new FileInputStream(file).getFD();
return new RawFileDescriptor() {
@Override
public FileDescriptor getFileDescriptor() {
return fileDescriptor;
}
@Override
public long getFileSize() {
return -1;
}
@Override
public long getStartPosition() {
return 0;
}
@Override
public void close() throws IOException {
}
};
} catch (IOException e) {
throw new FileNotFoundException("Not found support local file at " + uri);
}
}

4.然后在 “entry/src/main/config.json” 中完成 WebAbility 的聲明,代碼如下:

 {
"name": "com.example.webdemo.WebAbility",
"type": "data",
"uri": "dataability://com.example.webdemo.dataability"
},

找到config.json的對應的module,在abilities節點中添加以上代碼,具體位置如下:

"abilities": [
{
"name": "com.example.webdemo.WebAbility",
"type": "data",
"uri": "dataability://com.example.webdemo.dataability"
},
{
"visible": true,
"name": "com.example.webdemo.MainAbility",
"icon": "$media:icon",
"description": "$string:mainability_description",
"formsEnabled": true,
"label": "$string:entry_MainAbility",
"type": "page",
}
],
......

在abilities中聲明的 uri 的值便是webview加載的路徑,在WebAbility里面進行了資源文件的解析,當路徑指向WebAbility時,H5頁面就可以在WebAbility上顯示了。

5.創建 WebView 并加載本地頁面。

在MainAbility的onStart()中創建WebView,并配置支持訪問Data Ability資源,支持JavaScript,通過webView.load()加載本地H5頁面,加載地址為:“dataability://com.example.webdemo.dataability/rawfile/help-center/index.html#/”,“dataability://com.example.webdemo.dataability”是指向解析本地資源文件的Ability,后面拼接加載頁面的路徑,具體代碼如下:

  DirectionalLayout dLayout = new DirectionalLayout(this);
dLayout.setLayoutConfig(new ComponentContainer.LayoutConfig(
ComponentContainer.LayoutConfig.MATCH_PARENT,
ComponentContainer.LayoutConfig.MATCH_PARENT
));
super.setUIContent(dLayout);
WebView webView = new WebView(this);
webView.getWebConfig().setJavaScriptPermit(true);
webView.getWebConfig().setDataAbilityPermit(true);
webView.load("dataability://com.example.webdemo.dataability/rawfile/help-center/index.html#/");
dLayout.addComponent(webView);

總結

實際項目中APP中的H5頁面一般都是通過網絡獲取的,并不需要本地解析資源文件。但是手機斷網或者網絡不穩定時,可以下載H5頁面到本地,通過以上方式使用webview加載本地H5頁面,避免出現手機斷網或者網絡不穩定時頁面加載不了的情況。

??想了解更多內容,請訪問:??

??51CTO OpenHarmony技術社區??

??https://ost.51cto.com??

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2017-05-10 07:33:41

AndroidWebView視頻

2020-12-13 12:14:45

H5開發H5-Dooring

2024-04-10 08:24:29

2015-07-15 14:38:54

H5移動適配

2015-07-15 12:30:37

移動端H5高清多屏

2023-08-15 08:34:28

頁面制作工具GitHub

2021-06-08 05:53:31

H5 頁面項目劉海屏適配

2023-05-29 18:33:30

得物H5容器

2017-07-28 08:07:05

2016-08-15 16:55:13

APP開發APP優化移動APP

2022-06-27 09:48:15

H5移動互聯網頁面性能

2020-06-04 16:57:07

移動開發互聯網實踐

2017-07-20 14:13:38

前端瀏覽器Native App

2024-04-11 10:02:06

iOS鍵盤Android

2025-03-28 08:55:00

H5頁面APPiOS

2016-03-10 11:21:57

H5前端框架

2023-08-14 23:45:55

2017-08-16 10:57:25

H5HTML開發

2018-02-06 16:21:13

H5首屏探討

2015-12-16 12:40:32

H5緩存機制移動
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费视频99 | 国产不卡一区在线观看 | 国产在线资源 | 围产精品久久久久久久 | 在线观看视频福利 | 国产在线视频一区 | 亚洲字幕在线观看 | www视频在线观看 | 欧美日韩亚洲国产 | 狠狠干天天干 | 亚洲免费在线观看视频 | 国产福利在线 | 91精品国产91久久久久久密臀 | 成人黄在线观看 | 亚洲成人久久久 | 色综合99 | 久草热8精品视频在线观看 午夜伦4480yy私人影院 | 免费观看一区二区三区毛片 | 一级片av| 午夜精品一区二区三区在线视频 | 91免费观看 | 欧美一级片在线播放 | 成人在线a | 久久久99精品免费观看 | 91福利网 | 亚洲成人免费电影 | 欧美性久久| a级片在线观看 | 欧美日韩在线免费 | 自拍视频一区二区三区 | 国产一级一级毛片 | 在线国产小视频 | 精品视频免费在线 | 日韩色在线 | 国产精品一区二 | 91免费观看国产 | 亚洲免费一区二区 | 自拍视频在线观看 | a级毛片毛片免费观看久潮喷 | 亚洲精品字幕 | 亚洲一区二区久久久 |