瀏覽器
介紹
本示例使用[@ohos.systemparameter]接口和[Web組件]展示了一個瀏覽器的基本功能,展示網頁,根據頁面歷史棧前進回退等。
效果預覽
使用說明:
- 連接Wifi,啟動應用,展示默認頁面內容;
- 點擊默認頁面的圖標跳轉到對應網頁,或者在輸入框輸入網址,點擊右側跳轉按鈕跳轉到對應網頁;
- 點擊輸入框左側向右向左按鈕進行頁面的前進后退;
- 點擊主頁圖標回到主頁,點擊加號按鈕新建一個頁面。
工程目錄
entry/src/main/ets/
|---Application
| |---AbilityStage.ets // 入口
|---pages
| |---Index.ets // 首頁
|---common
| |---PhoneLayout.ets // 窗口管理工具
| |---TitleBar.ets // 導航欄
|---model
| |---Logger.ts // 日志工具
| |---Browser.ets // 瀏覽器實例
具體實現
- Web展示與歷史棧操作功能在Browser中,源碼參考[Browser.ets]
/*
* Copyright (c) 2022 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import Logger from './Logger'
import prompt from '@ohos.prompt';
export class WebObject {
controller: WebController;
isRegistered: boolean;
constructor(controller: WebController, isRegistered: boolean) {
this.controller = controller
this.isRegistered = isRegistered
}
}
@Observed
class WebKey {
key: number;
timestamp: number;
constructor(key: number, timestamp: number) {
this.key = key
this.timestamp = timestamp
}
}
export enum LoadingStatus {
LOADING,
END
}
const TAG: string = '[browser]'
export class Browser {
inputValue: string = ""
tabArrayIndex: number = 0
progress: number = 0
hideProgress: boolean = true
loadingStatus: LoadingStatus = LoadingStatus.END
webArray: Array< WebKey > = [new WebKey(0, new Date().getTime())]
tabsController: TabsController = new TabsController()
webControllerArray: Array< WebObject > = [new WebObject(new WebController(), false)]
deleteTab(index: number) {
Logger.info(TAG, `delete before tab index= ${index} controller length ${this.webControllerArray.length} tabArrayIndex= ${this.tabArrayIndex}`)
this.webArray.splice(index, 1)
this.webControllerArray.splice(index, 1)
if (this.tabArrayIndex > index || this.tabArrayIndex === this.webArray.length) {
this.tabArrayIndex -= 1
}
for (let i = index;i < this.webArray.length; ++i) {
this.webArray[i].key -= 1
}
for (let i = 0;i < this.webArray.length; ++i) {
Logger.info(TAG, `key ${this.webArray[i].key}, time=${this.webArray[i].timestamp}`)
}
Logger.info(`delete after tab index=${index}, controller length=${this.webControllerArray.length}, tabArrayIndex=${this.tabArrayIndex}`)
this.tabsController.changeIndex(this.tabArrayIndex)
}
getWebArray() {
return this.webArray
}
addTab() {
if (this.webArray.length > 10) {
prompt.showToast({
message: '頁簽數量已滿'
})
return;
}
let webController: WebController = new WebController();
let object = new WebObject(webController, false)
this.webControllerArray.push(object)
this.webArray.push(new WebKey(this.webArray.length, new Date().getTime()))
this.tabArrayIndex = this.webArray.length - 1
Logger.info(TAG, `add tab index= ${this.tabArrayIndex}`)
setTimeout(() = > {
this.tabsController.changeIndex(this.tabArrayIndex)
}, 50)
}
setTabArrayIndex(tabArrayIndex: number) {
this.tabArrayIndex = tabArrayIndex
}
getTabArrayIndex() {
return this.tabArrayIndex
}
setInputVal(inputValue: string) {
this.inputValue = inputValue
}
getInputVal() {
return this.inputValue
}
loadUrl(addr: string) {
addr = "https://" + addr;
this.webControllerArray[this.tabArrayIndex].controller.loadUrl({ url: addr })
}
Back() {
if (this.webControllerArray[this.tabArrayIndex].controller.accessBackward()) {
this.webControllerArray[this.tabArrayIndex].controller.backward()
}
}
Forward() {
if (this.webControllerArray[this.tabArrayIndex].controller.accessForward()) {
this.webControllerArray[this.tabArrayIndex].controller.forward()
}
}
Refresh() {
this.webControllerArray[this.tabArrayIndex].controller.refresh()
}
}
- 加載網頁及刷新:使用WebController提供的loadUrl可以加載目標網址內容,使用refresh方法刷新頁面;
- 頁面前進后退功能:頁面在前進或者后退前使用accessForward/accessBackward查詢是否有歷史記錄,然后調用forward/backward進行前進/后退操作。
依賴
不涉及。
約束與限制
- 本示例僅支持標準系統上運行;
- 本示例需外接鼠標進行驗證;
- 本示例已適配API version 9版本SDK,版本號:3.2.11.9。
- 本示例不支持點擊tab頁簽,切換網頁并刷新頁面;
- 本示例涉及使用系統接口:[@ohos.systemparameter],需要手動替換Full SDK才能編譯通過。
- 本示例需要使用DevEco Studio 3.1 Beta2 (Build Version: 3.1.0.400, built on April 7, 2023)及以上版本才可編譯運行。
下載
如需單獨下載本工程,執行如下命令:
git init
git config core.sparsecheckout true
echo code/BasicFeature/Web/Browser/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master
審核編輯 黃宇
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
瀏覽器
+關注
關注
1文章
1040瀏覽量
36095 -
鴻蒙
+關注
關注
59文章
2526瀏覽量
43788
發布評論請先 登錄
相關推薦
熱點推薦
老電視如何安裝瀏覽器?
2017年購買的夏普老電視,1.5G+8G存儲,網上下的瀏覽器APK文件在電視內打開就彈出“解析程序包出現問題”。
未知來源選項已打開,存儲空間清空到只剩下三個應用(只占用300M左右),基本可
發表于 06-01 18:57
edge瀏覽器識別 latex語法插件
默認的瀏覽器是沒有latex識別功能的,容易顯示為亂碼或者源碼,無法正常識別。本插件需要在瀏覽器的擴展程序菜單下安裝,能在edge下完美運行。本插件是免費插件。
發表于 03-17 18:03
?0次下載
E2000 Speedometer測試瀏覽器性能
E2000 Speedometer****測試瀏覽器性能
Version:V1.0
日期:2024-12-5
1、瀏覽器基準測試Speedometer
Speedometer是一款專為Web瀏覽器
發表于 01-10 21:33
2024年12月瀏覽器市場份額報告:谷歌Chrome穩居榜首
根據市場調查機構Statcounter最新發布的權威報告,2024年12月全球瀏覽器市場份額排行榜中,谷歌Chrome瀏覽器再次以卓越的表現穩居首位。數據顯示,Chrome的市場占有率高達68.38
Chrome瀏覽器優化Android性能,驍龍8至尊版表現突出
谷歌近日對Chrome瀏覽器的最新版本進行了重大更新,特別針對Android設備進行了性能優化,特別是對于搭載驍龍8至尊版處理器的旗艦設備而言。 自Chrome M112版本以來,Android
OpenAI醞釀創新:計劃開發集成聊天機器人的瀏覽器
近日,人工智能領域的佼佼者OpenAI正醞釀著一項可能改變瀏覽器行業格局的重大創新——開發一款能夠與其聊天機器人無縫結合的網絡瀏覽器。 據知情人士透露,OpenAI已與多家知名網站和應用程序開
AWTK 最新動態:支持瀏覽器控件
導讀AWTK瀏覽器控件,基于webview項目實現,將瀏覽器嵌入到AWTK應用程序中,讓開發者可以方便的集成在線幫助和調用地圖等功能。awtk-widget-web-view是基于webview實現的AWTK

寫一個Chrome瀏覽器插件
、瀏覽器插件有哪些種類 ?以chromium為內核的瀏覽器插件如Chrome ??firefox瀏覽器插件 ???safari瀏覽器插件 本文只介紹Chrome插件的原生

鴻蒙Flutter實戰:07混合開發
# 鴻蒙Flutter實戰:混合開發
鴻蒙Flutter混合開發主要有兩種形式。
## 1.基于har
將flutter module
發表于 10-23 16:00

不只是前端,后端、產品和測試也需要了解的瀏覽器知識(二)
繼上篇《 不只是前端,后端、產品和測試也需要了解的瀏覽器知識(一)》介紹了瀏覽器的基本情況、發展歷史以及市場占有率。 本篇文章將介紹瀏覽器基本原理。 在掌握基本原理后,通過技術深入,在研發

谷歌Chrome瀏覽器新增三大AI功能,提升用戶體驗
谷歌近日宣布,在其廣受歡迎的Chrome瀏覽器中引入了三項前沿的AI技術功能,旨在為用戶提供更加智能、便捷的瀏覽體驗。這些新功能由Gemini技術強力驅動,目前已在Chrome桌面版上線,標志著谷歌在AI與瀏覽器融合方面的又一重
不只是前端,后端、產品和測試也需要了解的瀏覽器知識
一、我們為什么要了解瀏覽器? 1. 對于前端開發者 1.瀏覽器是用戶體驗的第一線。我們需要了解瀏覽器的工作原理,才能有效地設計和實現用戶界面,確保良好的用戶體驗。 2.好的產品需要考慮

如何用python調用瀏覽器的視頻?
linda 我想用python調用瀏覽器的視頻。
我使用cv2調用視頻流,但是失敗了。
URL=\"http://192.168.4.1/face_stream\"
cap = cv2.VideoCapture(URL)
print(cap.isOpened())
輸出了false,請問該怎么實現?
發表于 06-26 08:15
評論