HarmonyOS 鸿蒙Next Web 控件onLoadIntercept 怎么区分拦截的url是当前页面还是新页面

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Web 控件onLoadIntercept 怎么区分拦截的url是当前页面还是新页面

Web 有一个onLoadIntercept 拦截请求的url。 但需要区分是当前页面还是新开的页面。

目的是当前页面不处理,但新开页面需要跳转到新的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是当前页面还是新页面,可以通过以下方法实现:

  1. URL对比:首先,获取当前页面的URL(可以通过页面实例或全局状态管理获取)。然后,在onLoadIntercept方法中将拦截到的URL与当前页面的URL进行对比。如果两者相同,则是当前页面;如果不同,则是新页面。

  2. 页面状态管理:利用全局状态管理(如Vuex、Redux等)或页面实例的属性来记录当前页面的URL。当onLoadIntercept触发时,检查状态管理中的URL与拦截到的URL是否一致,从而判断是否为当前页面。

  3. 页面生命周期:结合页面的生命周期方法(如onLoadonShow等),可以在页面加载或显示时更新当前页面的URL状态。这样,在onLoadIntercept中就能根据最新状态做出判断。

通过上述方法,你可以有效地在onLoadIntercept中区分拦截的URL是当前页面还是新页面。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部