瑞星 发表于 2024-10-17 10:42:19

鸿蒙NEXT版实战开发:ArkWeb设置基本属性和变乱(设置UserAgent)

设置UserAgent

默认UserAgent定义

从API version 11起,Web组件基于ArkWeb的内核,默认UserAgent定义如下:
Mozilla/5.0 ({deviceType}; {OSName} {OSVersion}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/{ArkWeb VersionCode} {Mobile}
字段含义备注deviceType装备类型通过系统参数const.product.devicetype映射得到。OSName发行版操作系统名称通过系统参数const.product.os.dist.name得到。OSVersion发行版操作系统版本通过系统参数const.product.os.dist.version剖析版本号得到。ArkWeb VersionCodeArkWeb版本号-Mobile(可选)是否是手机装备- 举例:
Mozilla/5.0 (Phone; OpenHarmony5.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/4.1.6.1 Mobile
发起通过ArkWeb关键字辨认是否是HarmonyOS装备以及web内核是否为ArkWeb,同时可以通过deviceType辨认装备类型用于差别装备上的页面表现
使用场景

在下面的示例中,通过getUserAgent()接口获取当前默认用户代理,支持开发者基于默认的UserAgent去定制UserAgent。
// xxx.ets
import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';

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

build() {
    Column() {
      Button('getUserAgent')
      .onClick(() => {
          try {
            let userAgent = this.controller.getUserAgent();
            console.log("userAgent: " + userAgent);
          } catch (error) {
            console.error(`ErrorCode: ${(error as BusinessError).code},Message: ${(error as BusinessError).message}`);
          }
      })
      Web({ src: 'www.example.com', controller: this.controller })
    }
}
} 加载的html文件。
// xxx.ets
import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct WebComponent {
controller: webview.WebviewController = new webview.WebviewController();
@State ua: string = "";

aboutToAppear(): void {
    webview.once('webInited', () => {
      try {
      // 应用侧用法示例,定制UserAgent。
      this.ua = this.controller.getUserAgent() + 'xxx';
      this.controller.setCustomUserAgent(this.ua);
      } catch (error) {
      console.error(`ErrorCode: ${(error as BusinessError).code},Message: ${(error as BusinessError).message}`);
      }
    })
}

build() {
    Column() {
      Web({ src: 'www.example.com', controller: this.controller })
    }
}
} 在下面的示例中,通过setCustomUserAgent()接口设置自定义用户代理,会覆盖系统的用户代理。
当Web组件src设置了url时,发起在onControllerAttached回调变乱中设置UserAgent,设置方式请参考示例。不发起将UserAgent设置在onLoadIntercept回调变乱中,会概率性出现设置失败。如果未在onControllerAttached回调变乱中设置UserAgent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置UserAgent不符的非常征象。
当Web组件src设置为空字符串时,发起先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载详细页面。
// xxx.ets
import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct WebComponent {
controller: webview.WebviewController = new webview.WebviewController();
@State customUserAgent: string = 'test';

build() {
    Column() {
      Web({ src: 'www.example.com', controller: this.controller })
      .onControllerAttached(() => {
      console.log("onControllerAttached");
      try {
          let userAgent = this.controller.getUserAgent() + this.customUserAgent;
          this.controller.setCustomUserAgent(userAgent);
      } catch (error) {
          console.error(`ErrorCode: ${(error as BusinessError).code},Message: ${(error as BusinessError).message}`);
      }
      })
    }
}
} 在下面的示例中,通过getCustomUserAgent()接口获取自定义用户代理。
// xxx.ets
import { webview } from '@kit.ArkWeb';
import { BusinessError } from '@kit.BasicServicesKit';

@Entry
@Component
struct WebComponent {
controller: webview.WebviewController = new webview.WebviewController();
@State userAgent: string = '';

build() {
    Column() {
      Button('getCustomUserAgent')
      .onClick(() => {
          try {
            this.userAgent = this.controller.getCustomUserAgent();
            console.log("userAgent: " + this.userAgent);
          } catch (error) {
            console.error(`ErrorCode: ${(error as BusinessError).code},Message: ${(error as BusinessError).message}`);
          }
      })
      Web({ src: 'www.example.com', controller: this.controller })
    }
}
} https://i-blog.csdnimg.cn/direct/63be0f5a1585491c91be715135952255.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 鸿蒙NEXT版实战开发:ArkWeb设置基本属性和变乱(设置UserAgent)