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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

深入淺出學習eTs之專屬瀏覽器制作流程

Harmony&嵌入式學習 ? 來源:Harmony&嵌入式學習 ? 作者:Harmony&嵌入式學 ? 2023-05-13 13:27 ? 次閱讀

一、需求分析

在前一章節(jié)我們學到了如何使用HarmonyOS遠端模擬器,這個章節(jié)我們就來實現(xiàn)一個聯(lián)網操作,從制作自己的一個專屬瀏覽器做起

默認主頁地址

顯示當前網址

具有刷新功能

可訪問真實網站

二、控件介紹

(1)Web

說明:

該組件從API Version 8開始支持。后續(xù)版本如有新增內容,則采用上角標單獨標記該內容的起始版本。

示例效果請以真機運行為準,當前IDE預覽器不支持。

提供具有網頁顯示能力的Web組件。

需要權限

訪問在線網頁時需添加網絡權限:ohos.permission.INTERNET,具體申請方式請參考權限申請聲明。

基本定義

interface WebInterface {
  (value: WebOptions): WebAttribute;
}

declare interface WebOptions {
  src: string | Resource;
  controller: WebController;
}

屬性介紹

declare class WebAttribute extends CommonMethod {
  javaScriptAccess(javaScriptAccess: boolean): WebAttribute;
  fileAccess(fileAccess: boolean): WebAttribute;
  onlineImageAccess(onlineImageAccess: boolean): WebAttribute;
  domStorageAccess(domStorageAccess: boolean): WebAttribute;
  imageAccess(imageAccess: boolean): WebAttribute;
  mixedMode(mixedMode: MixedMode): WebAttribute;
  javaScriptProxy(javaScriptProxy: { object: object, name: string, methodList: Array, controller: WebController }): WebAttribute;
  databaseAccess(databaseAccess: boolean): WebAttribute;
  userAgent(userAgent: string): WebAttribute;
  // 省略部分方法
}

javaScriptAccess:設置是否允許執(zhí)行 JS 腳本,默認為 true ,表示允許執(zhí)行。

fileAccess:設置是否開啟通過 $rawfile(filepath/filename) 訪問應用中 rawfile 路徑的文件, 默認為 false,表示不啟用。

fileFromUrlAccess:設置是否允許通過網頁中的 JS 腳本訪問 $rawfile(filepath/filename) 的內容,默認為 false ,表示未啟用。

imageAccess:設置是否允許自動加載圖片資源,默認為 true ,表示允許。

onlineImageAccess:設置是否允許從網絡加載圖片資源(通過 HTTP 和 HTTPS 訪問的資源),默認為 true ,表示允許訪問。

domStorageAccess:設置是否開啟文檔對象模型存儲接口(DOM Storage API)權限,默認為 false ,表示未開啟。

mixedMode:設置是否允許加載超文本傳輸協(xié)議(HTTP)和超文本傳輸安全協(xié)議(HTTPS)混合內容,默認為 MixedMode.None ,表示不允許加載 HTTP 和 HTTPS 混合內容。

databaseAccess:設置是否開啟數(shù)據(jù)庫存儲 API 權限,默認為 false ,表示不開啟。

userAgent:設置用戶代理。

javaScriptProxy:注入 JavaScript 對象到 window 對象中,并在 window 對象中調用該對象的方法。所有參數(shù)不支持更新。

Web事件介紹

declare class WebAttribute extends CommonMethod {
  onPageBegin(callback: (event?: { url: string }) => void): WebAttribute;
  onPageEnd(callback: (event?: { url: string }) => void): WebAttribute;
  onProgressChange(callback: (event?: { newProgress: number }) => void): WebAttribute;
  onTitleReceive(callback: (event?: { title: string }) => void): WebAttribute;
  onAlert(callback: (event?: { url: string, message: string, result: JsResult }) => boolean): WebAttribute;
  onConsole(callback: (event?: { message: ConsoleMessage }) => boolean): WebAttribute;
  onErrorReceive(callback: (event?: { request: WebResourceRequest, error: WebResourceError }) => void): WebAttribute;
  onFileSelectorShow(callback: (event?: { callback: Function, fileSelector: object }) => void): WebAttribute;
}

onPageBegin:網頁開始加載時觸發(fā)該回調,且只在 主frame 觸發(fā),iframe或者frameset的內容加載時不會觸發(fā)此回調。

onPageEnd:網頁加載完成時觸發(fā)該回調,且只在 主frame 觸發(fā)。

onProgressChange:網頁加載進度變化時觸發(fā)該回調,newProgress 的取值范圍為[0 ~ 100]。

onTitleReceive:網頁 document 標題更改時觸發(fā)該回調。

onAlert:H5 頁面內調用 alert() 時觸發(fā)該回調。

onConsole:H5 頁面內調用 console() 方法時的回調。

onFileSelectorShow:H5 頁面 input 標簽的 type 為 flie 時,點擊按鈕觸發(fā)該回調。

(2)權限管理

先看下官方的權限定義:https://docs.openharmony.cn/pages/v3.2Beta/zh-cn/application-dev/security/permission-list.md/

如果需要修改,請在Config.json中修改,其位置是"module"下新建"reqPermissions",如下:

    "reqPermissions": [
      {
        "name": "ohos.permission.MICROPHONE"
      },
      {
        "name": "ohos.permission.CAMERA"
      },
      {
        "name": "ohos.permission.MEDIA_LOCATION"
      },
      {
        "name": "ohos.permission.WRITE_MEDIA"
      },
      {
        "name": "ohos.permission.READ_MEDIA"
      },
      {
        "name": "ohos.permission.INTERNET"
      }
    ]

以上是申請了麥克風、攝像頭、本地圖庫、媒體讀寫和網絡訪問(個別訪問API使用)的權限。

三、UI/程序設計

本章節(jié)在上一章的基礎上進行,有疑問請看第十七章,遠端模擬器構建

(1)權限添加

wKgZomRfH7yALpH3AADt3jRdLks762.png

在文件結構中選擇config.json,添加互聯(lián)網權限

wKgaomRfH72AZL2BAAA_59H0Bgc544.png

(2)加載Web控件

wKgZomRfH72AC3SlAADPT7MNG_Y932.png

使用簡易代碼

@Entry
@Component
struct WebComponent {
  web_controller:WebController = new WebController();


  build() {
    Column() {
      Web({ src:'https://www.baidu.com/', controller:this.web_controller })
        .width('100%')
        .height('100%')
    }.width('100%')
    .height('80%')
  }
}

不知道怎么編譯運行的看我上個章節(jié)?。。?!

(3)設計網頁顯示框

引入變量

@State url: string = 'https://www.baidu.com/'

Web({ src:this.url, controller:this.web_controller })

使用TextInput組件實現(xiàn)輸入

      TextInput({
        placeholder: this.url
      }).height("5%").width("90%").fontSize(15)

wKgaomRfH76AB_pOAAHylkPJQAY994.png

(4)設計操作按鍵

這里操作按鍵設置包括刷新和加載兩個按鈕

      Row()
      {
        Button("刷新")
          .onClick(() => {
            this.web_controller.refresh();
          })

        Button("加載")
          .onClick(() => {
            this.web_controller.loadUrl({
              url: this.url
            })
          })
      }

wKgZomRfH7-APy20AAIShTp7Oog776.png

四、實際演示

wKgaomRfH7-AKMB0AA366u06_Bg756.gif

編輯:黃飛

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

    關注

    1

    文章

    1025

    瀏覽量

    35364
  • ets
    ets
    +關注

    關注

    0

    文章

    20

    瀏覽量

    1622
  • OpenHarmony
    +關注

    關注

    25

    文章

    3722

    瀏覽量

    16323
收藏 人收藏

    評論

    相關推薦

    #深入淺出學習eTs#(八)“猜大小”小游戲

    本項目Gitee倉地址:[深入淺出eTs學習: 帶大家深入淺出學習eTs (gitee.com)
    的頭像 發(fā)表于 05-17 15:08 ?1026次閱讀
    #<b class='flag-5'>深入淺出</b><b class='flag-5'>學習</b><b class='flag-5'>eTs</b>#(八)“猜大小”小游戲

    #深入淺出學習eTs#(九)變紅碼?專屬二維碼生成

    本項目Gitee倉地址: 深入淺出eTs學習: 帶大家深入淺出學習eTs (gitee.com)
    的頭像 發(fā)表于 05-13 13:21 ?1476次閱讀
    #<b class='flag-5'>深入淺出</b><b class='flag-5'>學習</b><b class='flag-5'>eTs</b>#(九)變紅碼?<b class='flag-5'>專屬</b>二維碼生成

    #深入淺出學習eTs#(十)藍藥丸還是紅藥丸

    本項目Gitee倉地址: 深入淺出eTs學習: 帶大家深入淺出學習eTs (gitee.com)
    的頭像 發(fā)表于 05-17 15:07 ?954次閱讀
    #<b class='flag-5'>深入淺出</b><b class='flag-5'>學習</b><b class='flag-5'>eTs</b>#(十)藍藥丸還是紅藥丸

    ARM7 深入淺出學習

    深入淺出ARM7 LPC213x_214 學習
    發(fā)表于 12-04 17:28

    深入淺出排序學習使用指南

    深入淺出排序學習:寫給程序員的算法系統(tǒng)開發(fā)實踐
    發(fā)表于 09-16 11:38

    #深入淺出學習eTs#(一)模擬/真機環(huán)境搭建

    本項目的Gitee倉地址: 深入淺出eTs學習: 帶大家深入淺出學習eTs (gitee.com
    發(fā)表于 12-24 13:02

    #深入淺出學習eTs#(七)判斷密碼是否正確

    本項目Gitee倉地址:深入淺出eTs學習: 帶大家深入淺出學習eTs (gitee.com)一
    發(fā)表于 12-29 10:06

    #深入淺出學習eTs#(九)變紅碼?專屬二維碼生成

    本項目Gitee倉地址:深入淺出eTs學習: 帶大家深入淺出學習eTs (gitee.com)一
    發(fā)表于 12-29 10:09

    #深入淺出學習eTs#(十八)專屬瀏覽器

    本項目Gitee倉地址:深入淺出eTs學習: 帶大家深入淺出學習eTs (gitee.com)一
    發(fā)表于 12-29 13:58

    深入淺出Cortex-M0學習資料

    深入淺出Cortex-M0學習資料
    發(fā)表于 06-18 10:50 ?0次下載
    <b class='flag-5'>深入淺出</b>Cortex-M0<b class='flag-5'>學習</b>資料

    STM32深入淺出新手篇

    STM32深入淺出新手篇,很好的單片機學習資料。
    發(fā)表于 03-21 17:43 ?128次下載

    深入淺出學習250個通信原理資源下載

    深入淺出學習250個通信原理資源下載
    發(fā)表于 04-12 09:16 ?28次下載

    深入淺出學習低功耗藍牙協(xié)議棧

    深入淺出學習低功耗藍牙協(xié)議棧
    發(fā)表于 06-23 10:35 ?57次下載

    深入淺出學習eTs(一)模擬/真機環(huán)境搭建

    本項目的Gitee倉地址: 深入淺出eTs學習: 帶大家深入淺出學習eTs (gitee.com
    的頭像 發(fā)表于 05-13 13:17 ?1681次閱讀
    <b class='flag-5'>深入淺出</b><b class='flag-5'>學習</b><b class='flag-5'>eTs</b>(一)模擬<b class='flag-5'>器</b>/真機環(huán)境搭建

    深入淺出學習eTs(七)如何判斷密碼是否正確

    本項目Gitee倉地址: 深入淺出eTs學習: 帶大家深入淺出學習eTs (gitee.com)
    的頭像 發(fā)表于 05-13 13:20 ?914次閱讀
    <b class='flag-5'>深入淺出</b><b class='flag-5'>學習</b><b class='flag-5'>eTs</b>(七)如何判斷密碼是否正確