成人免费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移動互聯網頁面性能

2017-07-20 14:13:38

前端瀏覽器Native App

2020-06-04 16:57:07

移動開發互聯網實踐

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技術棧公眾號

主站蜘蛛池模板: 51ⅴ精品国产91久久久久久 | 精品国产亚洲一区二区三区大结局 | 一区二区三区韩国 | 自拍偷拍精品 | 亚洲一区中文字幕在线观看 | 亚洲一区视频在线 | 日韩三区| 国产精品成人久久久久 | 日本大香伊一区二区三区 | 精久久久 | 日本久久黄色 | 91欧美激情一区二区三区成人 | 日韩在线免费视频 | 中文字幕一区二区三区四区五区 | av中文字幕在线播放 | 欧美激情一区二区三区 | 日韩欧美在线视频 | 一区免费 | 欧美1区 | 五月精品视频 | 久久9精品| 九九色综合 | 欧美一二三 | 欧美一区二区视频 | 成人久久18免费网站图片 | 久热m3u8 | 色爱综合网 | 午夜精品网站 | 亚洲国产一区二区视频 | 91久久精品国产免费一区 | 99热在线观看精品 | 精品日韩 | 日韩在线小视频 | 免费人成在线观看网站 | 99re视频在线 | 久久久久久成人 | 国产蜜臀97一区二区三区 | 久久综合影院 | 天天操 天天操 | 日韩 欧美 综合 | 免费看av大片 |