HarmonyOS webInited这个事件有时候触发有时候不触发
import { webview } from '@kit.ArkWeb';
import {WebpageStatus,OffsetEnum, SpanEnum,ColumnEnum} from "../constants/CommonEnums"
import {CommonConstants} from "../constants/CommonConstants"
import Logger from "../utils/Logger"
import { FailureLayout } from './FailureLayout';
import { LoadingLayout } from './LoadingLayout';
import { TopNavigationView } from './TopNavigationView';
import { BusinessError } from '@kit.BasicServicesKit';
const TAG = '[WebView]';
// @Entry({ routeName: 'WebView' })
@Component
export struct WebView {
onDestinationBack: () => boolean = () => false;
handlePageEnd?: () => void;
shouldShowExtBtn?: () => void;
hiddenScrollBar?: boolean = false;
url: string = '';
name:string="";
showHeader:boolean=true;
isLarge?: boolean = true;
@Link webViewController: webview.WebviewController;
@State webStatus: WebpageStatus = WebpageStatus.INIT;
@State ua: string = "";
aboutToAppear() {
this.webViewController = new webview.WebviewController();
webview.WebviewController.setWebDebuggingAccess(true);
webview.once('webInited', () => {
try {
// 应用侧用法示例,定制UserAgent。
this.ua = this.webViewController.getUserAgent();
this.webViewController.setCustomUserAgent(this.ua);
Logger.info(TAG, 'webInited userAgent: ' + this.webViewController.getCustomUserAgent());
} catch (error) {
console.error(`ErrorCode: ${(error as BusinessError).code}, Message: ${(error as BusinessError).message}`);
}
})
}
build() {
NavDestination() {
GridRow({
columns: this.isLarge ? { sm: ColumnEnum.SM, md: ColumnEnum.MD, lg: ColumnEnum.LG } : 1,
gutter: {
x: {
sm: $r('app.float.xxl_padding_margin'),
md: $r('app.float.md_padding_margin'),
lg: $r('app.float.md_padding_margin')
}
},
breakpoints: { reference: BreakpointsReference.ComponentSize }
}) {
GridCol({
span: this.isLarge ? { sm: SpanEnum.SM, md: SpanEnum.MD, lg: SpanEnum.LG } : 1,
offset: this.isLarge ? { sm: OffsetEnum.SM, md: OffsetEnum.MD, lg: OffsetEnum.LG } : 0
}) {
Column() {
if(this.showHeader){
TopNavigationView({ title: this.name, onDestinationBack: () => this.onDestinationBack() })
}
Stack() {
Web({ controller: this.webViewController, src: this.url })
.darkMode(WebDarkMode.Auto)
.domStorageAccess(true)
.zoomAccess(true)
.fileAccess(true)
.mixedMode(MixedMode.All)
.cacheMode(CacheMode.None)
.verticalScrollBarAccess(!this.hiddenScrollBar)
.javaScriptAccess(true)
.width(CommonConstants.FULL_PERCENT)
.onProgressChange((event) => {
Logger.info(TAG, 'newProgress:' + event?.newProgress);
if (event?.newProgress === 100) {
this.shouldShowExtBtn && this.shouldShowExtBtn();
}
Logger.info(TAG, 'onProgressChange weburl: ' + this.webViewController.getUrl());
})
.onPageBegin(() => {
Logger.info(TAG, ' onPageBegin start loading');
Logger.info(TAG, 'onPageBegin weburl: ' + this.webViewController.getUrl());
Logger.info(TAG, 'onPageBegin userAgent: ' + this.webViewController.getCustomUserAgent());
})
.onErrorReceive(() => {
Logger.info(TAG, 'onErrorReceive: error');
this.webStatus = WebpageStatus.FINISHED;
})
.onPageEnd((event) => {
Logger.info(TAG, 'onPageEnd loading completed url: ' + event?.url);
Logger.info(TAG, 'onPageEnd weburl: ' + this.webViewController.getUrl());
if (this.webStatus != WebpageStatus.ERROR) {
this.webStatus = WebpageStatus.FINISHED;
this.handlePageEnd && this.handlePageEnd();
}
})
if (this.webStatus === WebpageStatus.INIT) {
Column() {
LoadingLayout()
}
.backgroundColor(Color.White)
}
if (this.webStatus === WebpageStatus.ERROR) {
Column() {
FailureLayout({
handleReload: () => {
this.webViewController.refresh();
this.webStatus = WebpageStatus.INIT;
}
})
}
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)
.backgroundColor(Color.White)
.width(CommonConstants.FULL_PERCENT)
.height(CommonConstants.FULL_PERCENT)
}
}
}
}
}
.layoutWeight(1)
}
.width("100%")
.hideTitleBar(true)
.onShown(() => {
})
.onHidden(() => {
})
.onBackPressed(() => this.onDestinationBack())
}
}
根据日志来看,我多次运行程序,webInited这个事件为什么有时候触发有时候不触发,为啥?
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
为什么XComponent有时候无法触发键盘的抬起事件
386浏览 • 1回复 待解决
HarmonyOS 自定义弹窗有时候能弹出,有时候弹不出
289浏览 • 1回复 待解决
HarmonyOS Web组件有时候会卡几秒或者很久白页,同一个页面有时候很快有时候会卡
60浏览 • 1回复 待解决
HarmonyOS PhotoSelectOptions属性preselectedUris有时候会设置无效
52浏览 • 1回复 待解决
有时候报错,有时候又报,汗……
278浏览 • 1回复 待解决
HarmonyOS 首选项有时候存储会很慢,几秒钟或者更长
28浏览 • 1回复 待解决
#鸿蒙学习大百科#在module.json5中配置权限时,为什么有时reason必填,有时候可以不填?
297浏览 • 1回复 待解决
Run entry方式运行APP有时候获取不到已经存储的Asset和首选项数据
344浏览 • 1回复 待解决
华为m30Pro升级鸿蒙后为什么有时候手机信号间歇性不好?
6855浏览 • 1回复 待解决
#鸿蒙通关秘籍#为什么我有时候使用@Builder装饰器会直接报错呢?这个装饰器还有限制条件的吗?
141浏览 • 1回复 待解决
有时候我需要更新或替换一些库。
199浏览 • 1回复 待解决
HarmonyOS 位置权限访问弹窗是只有两个选项吗,看设置里面怎么有时候是三个,有个始终允许
54浏览 • 1回复 待解决
HarmonyOS 非首次打开的webivew组件无法触发webInited事件
27浏览 • 1回复 待解决
怎么说呢自从明白学习是孤独的我也清楚明白但是有时候觉得很累如何找到支撑自己的动力呢我
3746浏览 • 1回复 待解决
在用户点击组件a,a的onClick()方法被触发的时候组件b的onClick()方法也被触发,这个HarmonyOS能做到吗?
446浏览 • 1回复 待解决
HarmonyOS 事件触发相关
62浏览 • 1回复 待解决
onUnhandledException与onException回调分别什么时候触发
1842浏览 • 1回复 待解决
HarmonyOS navigation不触发onpageshow
9浏览 • 1回复 待解决
HarmonyOS onKeyEvent 按钮不触发
29浏览 • 1回复 待解决
HarmonyOS onPageShow事件无法触发
34浏览 • 1回复 待解决
HarmonyOS onPageShow事件无法触发
28浏览 • 1回复 待解决
HarmonyOS 生命周期不触发
80浏览 • 1回复 待解决
HarmonyOS onVisibleAreaChange事件没有触发
79浏览 • 1回复 待解决
HarmonyOS setSmoothZoom这个触发变焦的方法,可以知道触发变焦这个动作的耗时吗
18浏览 • 1回复 待解决
Navigation组件的页面跳转行为不会导致Web页面重新初始化,而webInited事件是Web组件的一个事件,用于在Web初始化完成时触发回调。其触发条件是当Web组件完成初始化过程后,会触发该事件。所以使用navigation跳转只有第一次打开这个webview页面的时候才会触发webInited的callback事件是正常的