HarmonyOS 鸿蒙Next 在webview中如何判定302跳转

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

HarmonyOS 鸿蒙Next 在webview中如何判定302跳转

在webview中如何判定302跳转

3 回复

可以使用onLoadIntercept拦截资源加载,并且根据回调OnLoadInterceptEvent判断是否是重定向。

import web_webview from '@ohos.web.webview';

@Entry
@Component
struct WebComponent {
  controller: web_webview.WebviewController = new web_webview.WebviewController();
  @State loadUrl: string | null = null

  build() {
    Column() {

      Web({ src: 'https://www.huawei.com', 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 在webview中如何判定302跳转的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


// xxx.ets

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.pingan.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系统中,判定WebView中的302跳转可以通过监听WebView的导航事件来实现。WebView组件提供了相关的回调接口,用于捕获HTTP状态码和URL变化。

具体步骤如下:

  1. 设置WebViewClient:为WebView设置WebViewClient,覆盖shouldOverrideUrlLoadingshouldInterceptRequest方法(根据API版本选择)。

  2. 捕获HTTP响应:在shouldInterceptRequest方法中,可以获取到WebResourceRequest对象,检查其HTTP状态码。如果是302,则表明发生了重定向。

  3. 处理302跳转:根据业务需求,可以在捕获到302跳转后执行相应逻辑,比如记录跳转URL,或者决定是否允许该跳转。

示例代码片段(假设使用shouldInterceptRequest):

webView.setWebViewClient(new WebViewClient() {
    @Override
    public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
        if (request.getUrl().toString().contains("302")) {
            // 这里判断逻辑简化,实际应检查HTTP响应码
            // 捕获到302跳转,执行相应逻辑
            // 例如:记录跳转URL
        }
        return super.shouldInterceptRequest(view, request);
    }
});

注意:上述代码中的contains("302")仅用于示例,实际应解析HTTP响应头中的状态码。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部