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

瑞星  金牌会员 | 2024-10-17 10:42:19 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 861|帖子 861|积分 2583

设置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。
  1. // xxx.ets
  2. import { webview } from '@kit.ArkWeb';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. @Entry
  5. @Component
  6. struct WebComponent {
  7.   controller: webview.WebviewController = new webview.WebviewController();
  8.   build() {
  9.     Column() {
  10.       Button('getUserAgent')
  11.         .onClick(() => {
  12.           try {
  13.             let userAgent = this.controller.getUserAgent();
  14.             console.log("userAgent: " + userAgent);
  15.           } catch (error) {
  16.             console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
  17.           }
  18.         })
  19.       Web({ src: 'www.example.com', controller: this.controller })
  20.     }
  21.   }
  22. }
复制代码
加载的html文件。
  1. // xxx.ets
  2. import { webview } from '@kit.ArkWeb';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. @Entry
  5. @Component
  6. struct WebComponent {
  7.   controller: webview.WebviewController = new webview.WebviewController();
  8.   @State ua: string = "";
  9.   aboutToAppear(): void {
  10.     webview.once('webInited', () => {
  11.       try {
  12.         // 应用侧用法示例,定制UserAgent。
  13.         this.ua = this.controller.getUserAgent() + 'xxx';
  14.         this.controller.setCustomUserAgent(this.ua);
  15.       } catch (error) {
  16.         console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
  17.       }
  18.     })
  19.   }
  20.   build() {
  21.     Column() {
  22.       Web({ src: 'www.example.com', controller: this.controller })
  23.     }
  24.   }
  25. }
复制代码
在下面的示例中,通过setCustomUserAgent()接口设置自定义用户代理,会覆盖系统的用户代理。
当Web组件src设置了url时,发起在onControllerAttached回调变乱中设置UserAgent,设置方式请参考示例。不发起将UserAgent设置在onLoadIntercept回调变乱中,会概率性出现设置失败。如果未在onControllerAttached回调变乱中设置UserAgent。再调用setCustomUserAgent方法时,可能会出现加载的页面与实际设置UserAgent不符的非常征象。
当Web组件src设置为空字符串时,发起先调用setCustomUserAgent方法设置UserAgent,再通过loadUrl加载详细页面。
  1. // xxx.ets
  2. import { webview } from '@kit.ArkWeb';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. @Entry
  5. @Component
  6. struct WebComponent {
  7.   controller: webview.WebviewController = new webview.WebviewController();
  8.   @State customUserAgent: string = 'test';
  9.   build() {
  10.     Column() {
  11.       Web({ src: 'www.example.com', controller: this.controller })
  12.       .onControllerAttached(() => {
  13.         console.log("onControllerAttached");
  14.         try {
  15.           let userAgent = this.controller.getUserAgent() + this.customUserAgent;
  16.           this.controller.setCustomUserAgent(userAgent);
  17.         } catch (error) {
  18.           console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
  19.         }
  20.       })
  21.     }
  22.   }
  23. }
复制代码
在下面的示例中,通过getCustomUserAgent()接口获取自定义用户代理。
  1. // xxx.ets
  2. import { webview } from '@kit.ArkWeb';
  3. import { BusinessError } from '@kit.BasicServicesKit';
  4. @Entry
  5. @Component
  6. struct WebComponent {
  7.   controller: webview.WebviewController = new webview.WebviewController();
  8.   @State userAgent: string = '';
  9.   build() {
  10.     Column() {
  11.       Button('getCustomUserAgent')
  12.         .onClick(() => {
  13.           try {
  14.             this.userAgent = this.controller.getCustomUserAgent();
  15.             console.log("userAgent: " + this.userAgent);
  16.           } catch (error) {
  17.             console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
  18.           }
  19.         })
  20.       Web({ src: 'www.example.com', controller: this.controller })
  21.     }
  22.   }
  23. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

瑞星

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表