HarmonyOS 鸿蒙Next Web 控件onLoadIntercept 怎么区分拦截的url是当前页面还是新页面
HarmonyOS 鸿蒙Next Web 控件onLoadIntercept 怎么区分拦截的url是当前页面还是新页面
Web 有一个onLoadIntercept 拦截请求的url。 但需要区分是当前页面还是新开的页面。
目的是当前页面不处理,但新开页面需要跳转到新的Page页面
目的是当前页面不处理,但新开页面需要跳转到新的Page页面
2 回复
参考如下demo:
import web_webview from '[@ohos](/user/ohos).web.webview';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct WebComponent {
controller: web_webview.WebviewController = new web_webview.WebviewController();
[@State](/user/State) loadUrl: string | null = null
build() {
Column() {
Web({ src: 'https://b.p***h.com.cn/user', controller: this.controller })
.onLoadIntercept((event) => {
if (this.loadUrl == null) //判断首次加载
{
console.log("loginfo:首次加载")
this.loadUrl = event.data.getRequestUrl()
}
if (this.loadUrl != event.data.getRequestUrl() && this.loadUrl != null) //非首次加载判断
{
console.log("loginfo:两次url不一样—上次加载url:" + (this.loadUrl == null ? null : this.loadUrl) +
"----本次加载URL:" + event.data.getRequestUrl()) //打印加载url 可以删掉
this.loadUrl = event.data.getRequestUrl() //将此次加载路径保存入变量中,为下次对比做参照
if (event.data.isRedirect()) //判断服务器重定向
{
console.log("loginfo:服务器重定向")
} else {
if (event.data.isRequestGesture()) //判断是否发生了交互,未交互就跳转认定为代码重定向,发生了交互认定为正常页面跳转
{
console.log("loginfo:页面跳转") //,用户交互发生的页面跳转属于正常页面跳转,不属于重定向
} else {
console.log("loginfo:客户端页面代码重定向") //若未发生交互,直接进行页面跳转则认定发生了重定向
}
}
} else {
console.log("两次url相同,未生重定向") //两次url相同,为发生重定向
}
return false
})
}
}
}
在HarmonyOS鸿蒙系统中,Next Web控件的onLoadIntercept
方法用于拦截页面加载事件。要区分拦截的URL是当前页面还是新页面,可以通过以下方法实现:
-
URL对比:首先,获取当前页面的URL(可以通过页面实例或全局状态管理获取)。然后,在
onLoadIntercept
方法中将拦截到的URL与当前页面的URL进行对比。如果两者相同,则是当前页面;如果不同,则是新页面。 -
页面状态管理:利用全局状态管理(如Vuex、Redux等)或页面实例的属性来记录当前页面的URL。当
onLoadIntercept
触发时,检查状态管理中的URL与拦截到的URL是否一致,从而判断是否为当前页面。 -
页面生命周期:结合页面的生命周期方法(如
onLoad
、onShow
等),可以在页面加载或显示时更新当前页面的URL状态。这样,在onLoadIntercept
中就能根据最新状态做出判断。
通过上述方法,你可以有效地在onLoadIntercept
中区分拦截的URL是当前页面还是新页面。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html