一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙webview的使用和JS交互

ArkUI詳解 ? 來源:鴻蒙實驗室 ? 作者:鴻蒙實驗室 ? 2022-02-28 10:56 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

華為云享專家,InfoQ簽約作者,阿里云專家博主,51CTO博客首席體驗官,開源項目GVA成員之一,專注于大前端技術(shù)的分享,包括Flutter,小程序,安卓,VUE,JavaScript。

日常我們在開發(fā)項目時,為了項目快速的開發(fā)和迭代,難免會用到H5頁面。使用鴻蒙進(jìn)行項目開發(fā)時,也一樣免不了要加載H5頁面,在移動開發(fā)中打開H5頁面需要使用WebView組件。同時,為了和H5頁面進(jìn)行數(shù)據(jù)交換,有時候還需要借助JSBridge來實現(xiàn)客戶端與H5之間的通訊。

那么鴻蒙之中用到的技術(shù)是什么呢?WebView

在此之前,先看一個報錯

App Launch: The Huawei Lite Simulator supports only Lite projects.

鴻蒙webview的使用和JS交互

這是什么原因呢,其實簡單,就是你沒有登陸

鴻蒙webview的使用和JS交互

所以解決這個的問題就是你重新登錄就好了。

鴻蒙webview的使用和JS交互

漢化(V3.0 Beta2(2021-12-31)版本以上支持)

還有一個問題可能就是目前編輯器大家看著不太習(xí)慣,需要漢化一下,那么如何漢化呢,結(jié)合Androidstudio的經(jīng)驗,分為如下幾步

第一步點擊File-setting

鴻蒙webview的使用和JS交互

第二步plugins里面選擇如圖所示的插件,并安裝。

鴻蒙webview的使用和JS交互

第三步,重啟,漢化完成

鴻蒙webview的使用和JS交互

第一步創(chuàng)建項目

鴻蒙webview的使用和JS交互

點擊next

鴻蒙webview的使用和JS交互

第二步等依賴安裝安裝完成

第三步打開模擬

鴻蒙webview的使用和JS交互

點擊登錄,打開瀏覽器授權(quán)

鴻蒙webview的使用和JS交互

選擇p40

鴻蒙webview的使用和JS交互

啟動模擬器

鴻蒙webview的使用和JS交互

第五步開始正文

接下來開始正文。

應(yīng)用預(yù)覽:

點擊"打開網(wǎng)址"按鈕會加載上方網(wǎng)址的Web頁面,通過后退"和"前進(jìn)"按鈕實現(xiàn)Web頁面間的導(dǎo)航。

點擊"加載本地網(wǎng)頁"按鈕加載本地Web頁面,點擊"發(fā)送消息給本地html"或者Web頁面中的"調(diào)用Java方法"按鈕,實現(xiàn)應(yīng)用與Web頁面間的交互。

鴻蒙webview的使用和JS交互

這里是http訪問方式,鴻蒙的默認(rèn)是https訪問模式,如果您的請求網(wǎng)址是http開頭的,可以繼續(xù)查看后面的教程。

鴻蒙webview的使用和JS交互

1. 增加一個WebView組件

步驟 1 - 在"resources/base/layout/ability_main.xml"文件中創(chuàng)建WebView,示例代碼如下:

ohos:id

=

"$+id:webview"

ohos:height

=

"match_parent"

ohos:width

=

"match_parent"

>

步驟 2 - 在"slice/MainAbilitySlice.java"文件中通過如下方式獲取WebView對象,示例代碼如下:

WebView webview = (WebView) findComponentById(ResourceTable.Id_webview);

2. 通過WebView加載Web頁面

WebView加載頁面分為加載Web頁面和加載本地Web頁面兩種情況,接下來我們將分別進(jìn)行介紹。

1.WebView加載網(wǎng)絡(luò)Web頁面

跟Android類似,要訪問網(wǎng)絡(luò),我們首先要配置網(wǎng)絡(luò)訪問權(quán)限,在config.json的"module"節(jié)點最后,添加上網(wǎng)絡(luò)權(quán)限代碼

module": {

......

"reqPermissions": [

{

"name": "ohos.permission.INTERNET"

}

]

}

2 設(shè)置訪問模式

鴻蒙的默認(rèn)是https訪問模式,如果您的請求網(wǎng)址是http開頭的,請在config.json文件中的deviceConfig下,添加如下設(shè)置

"deviceConfig": {

"default": {

"network": {

"cleartextTraffic": true

}

}

},

在"slice/MainAbilitySlice.java"文件中通過webview.load(String url)方法訪問具體的Web頁面,通過WebConfig類對WebView組件的行為進(jìn)行配置,示例代碼如下:

WebConfig webConfig = webview.getWebConfig();

// WebView加載URL,其中urlTextField為輸入URL的TextField組件

webview.load(urlTextField.getText());

在Web頁面進(jìn)行鏈接跳轉(zhuǎn)時,WebView默認(rèn)會打開目標(biāo)網(wǎng)址,通過WebAgent對象可以定制該行為,示例代碼如下:

webview

.

setWebAgent

(

new

WebAgent

() {

@Override

public

boolean

isNeedLoadUrl

(

WebView

webView

,

ResourceRequest

request

) {

if

(

request

==

null

||

request

.

getRequestUrl

()

==

null

) {

LogUtil

.

info

(

TAG

,

"WebAgent isNeedLoadUrl:request is null."

);

return

false

;

}

String

url

=

request

.

getRequestUrl

().

toString

();

if

(

url

.

startsWith

(

"http:"

)

||

url

.

startsWith

(

"https:"

)) {

webView

.

load

(

url

);

return

false

;

}

else

{

return

super

.

isNeedLoadUrl

(

webView

,

request

);

}

}

});

除此之外,WebAgent對象還提供了相關(guān)的回調(diào)函數(shù)以觀測頁面狀態(tài)的變更,如onLoadingPage、onPageLoaded、onError等方法。WebView提供Navigator類進(jìn)行歷史記錄的瀏覽和處理,通過getNavigator()方法獲取該類的對象,使用canGoBack()或canGoForward()方法檢查是否可以向后或向前瀏覽,使用goBack()或goForward()方法向后或向前瀏覽,示例代碼如下:

Navigator navigator = webView.getNavigator();

if (navigator.canGoBack()) {

navigator.goBack();

}

if (navigator.canGoForward()) {

navigator.goForward();

}

3.WebView加載本地Web頁面

將本地的HTML文件放在"resources/rawfile/"目錄下,在本教程中命名為test.html。在HarmonyOS系統(tǒng)中,WebView要訪問本地Web文件,需要通過DataAbility的方式進(jìn)行訪問,DataAbility的具體使用方法可以參考開發(fā)

DataAbility,關(guān)于DataAbility的相關(guān)知識,后面也會繼續(xù)展示,誰讓他是最重要的內(nèi)容呢。

在"entry/src/main/config.json"中完成DataAbility的聲明,示例代碼如下:

module": {

......

"abilities": [

{

"name": "com.huawei.codelab.DataAbility",

"type": "data",

"uri": "dataability://com.example.harmonyosdemo.DataAbility"

}

]

}

另外需要實現(xiàn)一個DataAbility,通過實現(xiàn)openRawFile(Uri uri, String mode)方法,完成WebView對本地Web頁面的訪問,示例代碼如下:

public class DataAbility extends Ability { ... @Override public RawFileDescriptor openRawFile(Uri uri, String mode) throws FileNotFoundException { if (uri == null) {; return super.openRawFile(uri, mode); } String path = uri.getEncodedPath(); int splitIndex = path.indexOf('/', 1); String providerName = Uri.decode(path.substring(1, splitIndex)); String rawFilePath = Uri.decode(path.substring(splitIndex + 1)); RawFileDescriptor rawFileDescriptor = null; try { rawFileDescriptor = getResourceManager().getRawFileEntry(rawFilePath).openRawFileDescriptor(); } catch (IOException e) { // 異常處理 } return rawFileDescriptor; } }

在"slice/MainAbilitySlice.java"中聲明需要訪問的文件路徑,通過webview.load(String url)方法加載本地Web頁面,可以通過WebConfig類的對象對WebView訪問DataAbility的能力進(jìn)行配置,示例代碼如下:

private static final String URL_LOCAL = "dataability://com.huawei.codelab.DataAbility/resources/rawfile/test.html"; // 配置是否支持訪問DataAbility資源,默認(rèn)為true webConfig.setDataAbilityPermit(true); webview.load(URL_LOCAL);

4. 實現(xiàn)應(yīng)用與WebView中的Web頁面間的通信

本教程以本地Web頁面"resources/rawfile/test.html"為例介紹如何實現(xiàn)應(yīng)用與WebView中的Web頁面間交互。 首先需要對WebConfig進(jìn)行配置,使能WebView與Web頁面JavaScript交互的能力,示例代碼如下:

// 配置是否支持JavaScript,默認(rèn)值為false webConfig.setJavaScriptPermit(true);

1.應(yīng)用調(diào)用Web頁面

在"resources/rawfile/test.html"中編寫callJS方法,待應(yīng)用調(diào)用,示例代碼如下:

// 應(yīng)用調(diào)用Web頁面 function callJS(message) { alert(message); }

在"slice/MainAbilitySlice.java"中實現(xiàn)應(yīng)用對JavaScript的調(diào)用,示例代碼如下:

webview.executeJs("javascript:callJS('這是來自JavaSlice的消息')", msg -> { // 在這里處理Js的方法的返回值 });

我們可以通過setBrowserAgent方法設(shè)置自定義BrowserAgent對象,以觀測JavaScript事件及通知等,通過復(fù)寫onJsMessageShow方法來接管Web頁面彈出Alert對話框的事件,示例代碼如下:

webview.setBrowserAgent(new BrowserAgent(this) { @Override public boolean onJsMessageShow(WebView webView, String url, String message, boolean isAlert, JsMessageResult result) { LogUtil.info(TAG,"BrowserAgent onJsMessageShow : " + message); if (isAlert) { // 將Web頁面的alert對話框改為ToastDialog方式提示 new ToastDialog(getApplicationContext()).setText(message).setAlignment(LayoutAlignment.CENTER).show(); // 對彈框進(jìn)行確認(rèn)處理 result.confirm(); return true; } else { return super.onJsMessageShow(webView, url, message, isAlert, result); } } });

2.Web頁面使用JavaScript調(diào)用應(yīng)用

在"resources/rawfile/test.html"中編寫按鈕,當(dāng)按鈕被點擊時實現(xiàn)JavaScript對應(yīng)用的調(diào)用,示例代碼如下:

調(diào)用Java方法 function sendData() { if (window.JsCallJava && window.JsCallJava.call) { // Web頁面調(diào)用應(yīng)用 var rst = window.JsCallJava.call("這個是來自本地Web頁面的消息"); } else { alert('發(fā)送消息給WebviewSlice失敗'); } }

在"slice/MainAbilitySlice.java"中實現(xiàn)應(yīng)用對JavaScript發(fā)起的調(diào)用的響應(yīng),示例代碼如下:

private static final String JS_NAME = "JsCallJava"; webview.addJsCallback(JS_NAME, str -> { // 處理接收到的JavaScript發(fā)送來的消息,本教程通過ToastDialog提示確認(rèn)收到Web頁面發(fā)來的消息 new ToastDialog(this).setText(str).setAlignment(LayoutAlignment.CENTER).show(); // 返回給JavaScript return "Js Call Java Success"; });

總結(jié)

通過上面的完整代碼,我們已經(jīng)完成了webbiew的基本使用

倉庫地址:https://github.com/ITmxs/hm_webview

感謝沒用的喵叔指出的問題

鴻蒙webview的使用和JS交互

個人認(rèn)為這兩句有點多余,默認(rèn)處理http和https的邏輯應(yīng)該就是return true,在父類里已經(jīng)實現(xiàn)了。所以,這個方法直接改成這樣:

webview.setWebAgent(new WebAgent() { @Override public boolean isNeedLoadUrl(WebView webView, ResourceRequest request) { if (request == null || request.getRequestUrl() == null) { return false; } return super.isNeedLoadUrl(webView, request); } });

第二步刪除默認(rèn)代碼

打開index.hml文件,里面有默認(rèn)代碼如下:

山茶

第三步,開始學(xué)習(xí)

首先將圖片放到common文件夾下面的images里面,注意,我的圖片文件名是flutter.png,

從上面布局效果圖可以看到,界面主要由image組件和text組件組成,我們現(xiàn)在index.html中添加image組件和text組件,并添加對應(yīng)的class,用于設(shè)置組件的顯示效果,代碼如下:

translate

rotate

rotateY

scale

opacity

第四步,為頁面設(shè)計樣式

在這個任務(wù)中,我們將一起為任務(wù)二中寫好的頁面添加樣式,上面所有的組件都定義了class屬性,它對應(yīng)的樣式都定義在index.css中,有關(guān)css更多的知識可以參考css語法參考。 這部分定義了整個頁面中各個組件的樣式。在index.css中先添加如下代碼:

.container { background-color: #F8FCF5; flex-direction: column; justify-content: center; align-items: center; } .img { margin-top: 10px; height: 100px; width: 100px; animation-timing-function: ease; animation-duration: 2s; animation-delay: 0s; animation-fill-mode: forwards; animation-iteration-count: infinite; } .text { font-size: 20px; } .img-translate { animation-name: translateAnim; } .img-rotate { animation-name: rotateAnim; } .img-rotateY { animation-name: rotateYAnim; } .img-scale { animation-name: scaleAnim; } .img-mixes { animation-name: mixesAnim; } .img-opacity { animation-name: opacityAnim; } /*從-100px平移到100px*/ @keyframes translateAnim { from { transform: translate(-100px); } to { transform: translate(100px); } } /*從0°旋轉(zhuǎn)到360°*/ @keyframes rotateAnim { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /*沿Y軸旋轉(zhuǎn),從0°旋轉(zhuǎn)到360°*/ @keyframes rotateYAnim { from { transform: rotateY(0deg); } to { transform: rotateY(360deg); } } /*從0倍縮放到1.2倍大小*/ @keyframes scaleAnim { from { transform: scale(0); } to { transform: scale(1.2); } } /*透明度從0變化到1*/ @keyframes opacityAnim { from { opacity: 0; } to { opacity: 1; } }

通過一個代碼示例,實現(xiàn)image組件的平移、縮放、旋轉(zhuǎn)和透明度變化動效。希望通過本教程,各位開發(fā)者可以對JS通用動畫樣式具有更深刻的認(rèn)識。

在實現(xiàn)過程過也遇到一些問題,順便做個記錄

使用標(biāo)簽引入的本地圖片無法加載

使用標(biāo)簽引入本地圖片,但圖片無法加載的可能情況有三種:

沒有給圖片設(shè)置寬度和高度,需要在對應(yīng)的“page”目錄下的 css 樣式文件中設(shè)置圖 片的寬高。

使用標(biāo)簽的圖片不會自動縮放,圖片寬高超過組件的寬高會自動 截取。

圖片引入路徑錯誤。圖片引入的路徑必須是項目編譯后的靜態(tài)文件的路徑。 ? 在導(dǎo)入圖片或添加/刪除頁面后沒有重新編譯。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 華為
    +關(guān)注

    關(guān)注

    216

    文章

    35182

    瀏覽量

    255563
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2642

    瀏覽量

    67983
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    鴻蒙5開發(fā)寶藏案例分享---Web開發(fā)優(yōu)化案例分享

    的Web頁面,特別是JS體積較大的頁面。對于攔截替換的資源,需要正確管理緩存。 代碼示意 (主要依賴瀏覽器/V8機制,鴻蒙提供緩存管理API): import webview from
    發(fā)表于 06-12 17:20

    鴻蒙5開發(fā)寶藏案例分享---Web加載時延優(yōu)化解析

    鴻蒙開發(fā)寶藏:Web加載完成時延優(yōu)化實戰(zhàn) 大家好呀!今天在翻鴻蒙開發(fā)者文檔時,發(fā)現(xiàn)了一個隱藏的 性能優(yōu)化寶藏區(qū) ——官方竟然悄悄提供了超多實戰(zhàn)案例!尤其是****Web加載完成時延分析這塊,簡直是
    發(fā)表于 06-12 17:11

    鴻蒙5開發(fā)寶藏案例分享---一多交互事件開發(fā)實踐

    ?【鴻蒙開發(fā)寶藏技巧大放送!】原來官方藏了這么多實用案例,手把手教你玩轉(zhuǎn)多端交互! 小伙伴們好呀~我是剛在鴻蒙生態(tài)里摸爬滾打了兩年的開發(fā)者小明,今天要跟大家分享一個重大發(fā)現(xiàn)!最近翻官方文檔時居然挖到
    發(fā)表于 06-03 15:51

    華為鴻蒙電腦正式發(fā)布

    近日,華為鴻蒙電腦正式發(fā)布,宣告華為終端全面進(jìn)入鴻蒙時代,而鴻蒙電腦,更是打開了星閃HID外設(shè)的巨大想象力空間。個人消費者將享受到更便捷、穩(wěn)定且高速的設(shè)備連接體驗,迎來全新交互模式。
    的頭像 發(fā)表于 05-22 09:13 ?458次閱讀

    鴻蒙電腦拿什么和Windows競爭

    / 多端同步)、智慧體驗(鴻蒙?AI?/ 智慧交互)、融合生態(tài)(桌面生態(tài) / 移動生態(tài))的三大特點。此次鴻蒙電腦的發(fā)布,意味著華為終端正式進(jìn)入全面鴻蒙時代。 華為終端平板與PC產(chǎn)品線
    的頭像 發(fā)表于 05-09 11:41 ?485次閱讀

    【「鴻蒙操作系統(tǒng)設(shè)計原理與架構(gòu)」閱讀體驗】01-初始華為鴻蒙

    他軟件之間的交互。 2019年8月9日,華為開發(fā)者大會正式發(fā)布鴻蒙操作系統(tǒng)(HarmonyOs)。鴻蒙操作系統(tǒng)被定位為面向全場景、全連接、全智能時代的下一代智能終端操作系統(tǒng)。操作系統(tǒng)誕生以來,基于豐富
    發(fā)表于 01-25 11:05

    AWTK-WEB 快速入門(2) - JS 應(yīng)用程序

    導(dǎo)讀AWTK可以使用相同的技術(shù)棧開發(fā)各種平臺的應(yīng)用程序。有時我們需要使用Web界面與設(shè)備進(jìn)行交互,本文介紹一下如何使用JS語言開發(fā)AWTK-WEB應(yīng)用程序。用AWTKDesigner新建一個應(yīng)用程序先安裝AWTKDesigner:
    的頭像 發(fā)表于 12-05 01:04 ?477次閱讀
    AWTK-WEB 快速入門(2) - <b class='flag-5'>JS</b> 應(yīng)用程序

    Node.js小科普和Node.js安裝常見管理工具

    Node.js是一個JavaScript的運行環(huán)境,用來執(zhí)行JavaScript代碼。 為什么會出現(xiàn)這么一個運行環(huán)境呢,從JavaScript研發(fā)初衷可以看出它是為了運行在瀏覽器中的,讓網(wǎng)頁交互更加
    的頭像 發(fā)表于 11-23 15:37 ?396次閱讀
    Node.<b class='flag-5'>js</b>小科普和Node.<b class='flag-5'>js</b>安裝常見管理工具

    鴻蒙Taro實戰(zhàn):01-搭建開發(fā)環(huán)境

    ## 配置鴻蒙環(huán)境 ### 下載安裝 DevEco ### 配置IDE 打開 `Prefreences`, `OpenHarmony SDK`, 勾選 `API Version 12
    發(fā)表于 11-06 16:42

    鴻蒙Flutter實戰(zhàn):08-如何調(diào)試代碼

    使用 DevEcho 打開項目,點擊運行旁邊的 Debug Entry 按鈕,開始程序調(diào)試。 調(diào)試 Webview 參考文章 鴻蒙Flutter實戰(zhàn):04-如何使用DevTools調(diào)試Webview進(jìn)行
    發(fā)表于 10-23 16:29

    鴻蒙Flutter實戰(zhàn):05-使用第三方插件

    。 具體操作可以分別參考文章 [鴻蒙 Flutter 開發(fā)中集成 Webview](https://gitee.com/zacks/awesome-harmonyos-flutter/blob
    發(fā)表于 10-22 21:54

    鴻蒙Flutter實戰(zhàn):04-如何使用DevTools調(diào)試Webview

    # 鴻蒙 Flutter 如何使用 DevTools 調(diào)試 Webview 在《鴻蒙 Flutter 開發(fā)中集成 Webview》,介紹了如果在 Flutter 中集成
    發(fā)表于 10-22 21:53

    鴻蒙跨端實踐-JS虛擬機架構(gòu)實現(xiàn)

    類似的框架,我們需要自行實現(xiàn)以確保核心基礎(chǔ)能力的完整。 鴻蒙虛擬機的開發(fā)經(jīng)歷了從最初 ArkTs2V8 到 JSVM + Roma新架構(gòu)方案 。在此過程中,我們實現(xiàn)了完整的鴻蒙版的“J2V8”和 基于系統(tǒng)JSVM的JS虛擬機框架
    的頭像 發(fā)表于 09-30 14:42 ?2951次閱讀
    <b class='flag-5'>鴻蒙</b>跨端實踐-<b class='flag-5'>JS</b>虛擬機架構(gòu)實現(xiàn)

    史無前例,移植V8虛擬機到純血鴻蒙系統(tǒng)

    層使用,為保證基于Roma框架開發(fā)的業(yè)務(wù)可以零成本、無縫運行到鴻蒙系統(tǒng),需要將Roma框架適配到鴻蒙系統(tǒng)。 Roma框架是基于JS引擎運行的,在iOS系統(tǒng)使用系統(tǒng)內(nèi)置的JavascriptCore,在
    的頭像 發(fā)表于 09-18 10:28 ?1707次閱讀
    史無前例,移植V8虛擬機到純血<b class='flag-5'>鴻蒙</b>系統(tǒng)

    鴻蒙ArkTS聲明式組件:Web

    提供具有網(wǎng)頁顯示能力的Web組件,[@ohos.web.webview]提供web控制能力。
    的頭像 發(fā)表于 07-04 15:35 ?1356次閱讀
    <b class='flag-5'>鴻蒙</b>ArkTS聲明式組件:Web