记录Web组件onLoadIntercept拦截用法,HarmonyOS 鸿蒙Next大多网页会检测userAgent所以需要在onControllerAttached设置一下带android或ios特征的标识。

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

记录Web组件onLoadIntercept拦截用法,HarmonyOS 鸿蒙Next大多网页会检测userAgent所以需要在onControllerAttached设置一下带android或ios特征的标识。

Webview 自定义 UA(User Agent):在 Webview 加载时,会修改 User Agent 字符串,在原有基础上添加 Android 前缀。

URL 加载拦截:当 Webview 尝试加载 URL 时,会检查 URL 是否以 ‘yuque’ 开头,如果是,则重定向到百度首页,并阻止原始请求。

import { webview } from '@kit.ArkWeb';

@Entry
@Component
struct Page013 {
  controller: webview.WebviewController = new webview.WebviewController();

  build() {
    Column() {
      Web({
        src: "https://www.yuque.com/yuque/ekrzd1/dqdt6f", 
        controller: this.controller
      })
      .width('100%')
      .height('100%')
      .domStorageAccess(true)//设置是否开启文档对象模型存储接口(DOM Storage API)权限。
      .javaScriptAccess(true)//设置是否允许执行JavaScript脚本,默认允许执行。
      .databaseAccess(true)//设置是否开启数据库存储API权限,默认不开启。
      .mixedMode(MixedMode.All)//HTTP和HTTPS混合
      .fileAccess(true)//设置是否开启应用中文件系统的访问,默认启用。
      .imageAccess(true)//设置是否允许自动加载图片资源,默认允许。
      .geolocationAccess(true)//设置是否开启获取地理位置权限,默认开启。
      .onlineImageAccess(true)//设置是否允许从网络加载图片资源(通过HTTP和HTTPS访问的资源),默认允许访问。
      .mediaPlayGestureAccess(true)//设置有声视频播放是否需要用户手动点击,静音视频播放不受该接口管控,默认需要。
      .backgroundColor('#ffffff')//设置白色背景
      .onControllerAttached(() => {
        /**自定义UA*/
        let userAgent = 'Android' + this.controller.getUserAgent()
        this.controller.setCustomUserAgent(userAgent);
      })
      .onLoadIntercept((event) => {
        console.log('url:' + event.data.getRequestUrl())
        console.log('isMainFrame:' + event.data.isMainFrame())
        console.log('isRedirect:' + event.data.isRedirect())
        console.log('isRequestGesture:' + event.data.isRequestGesture())
        let url = event.data.getRequestUrl()
        //yuque://platformapi/startUrl?source=unknown&externalOpenApp=true&url=https%3A%2F%2Fwww.yuque.com%2Fyuque%2Fekrzd1%2Fdqdt6f
        if(url.indexOf('yuque')==0){
          this.controller.loadUrl("https://www.baidu.com")
          return true;
        }
        return false
      })
    }.width('100%').height('100%').align(Alignment.Top)
  }
}

更多关于记录Web组件onLoadIntercept拦截用法,HarmonyOS 鸿蒙Next大多网页会检测userAgent所以需要在onControllerAttached设置一下带android或ios特征的标识。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

🌹

更多关于记录Web组件onLoadIntercept拦截用法,HarmonyOS 鸿蒙Next大多网页会检测userAgent所以需要在onControllerAttached设置一下带android或ios特征的标识。的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,针对Web组件的onLoadIntercept拦截用法,特别是在处理userAgent字符串以满足网页兼容性需求时,可以通过以下方式进行操作:

  1. 定义拦截器:首先,在你的Web组件中定义一个onLoadIntercept拦截器。这个拦截器会在网页加载前被触发,允许你修改请求或执行其他逻辑。

  2. 修改userAgent:在onLoadIntercept回调中,检查并修改即将发送的HTTP请求的userAgent字段。由于许多网页会检测userAgent来适配不同的平台,你可以在这里添加androidios的特征标识,以确保网页能够正确渲染或提供预期的功能。

  3. 应用设置:在onControllerAttached生命周期方法中,确保你的拦截器已经正确设置并启用。这是确保拦截器能够在Web组件加载前生效的关键步骤。

  4. 测试验证:最后,通过加载不同类型的网页来验证你的userAgent修改是否有效。确保网页能够正确显示且功能正常。

示例代码(伪代码,具体实现需根据实际开发环境调整):

// 假设这是你的Web组件定义部分
webComponent.onLoadIntercept((request) => {
    request.headers['User-Agent'] += '; Android/10; AppleWebKit/537.36';
    return true; // 返回true表示允许请求继续
});

// 在onControllerAttached中确保拦截器已设置
webComponent.onControllerAttached(() => {
    // 初始化或配置拦截器的代码
});

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

回到顶部