HarmonyOS 鸿蒙Next中url适配

HarmonyOS 鸿蒙Next中url适配 Web组件加载url显示为电脑网页如何适配

4 回复

【背景知识】

  • ArkWeb:@ohos.web.webview提供web控制能力,Web组件提供网页显示的能力。
  • Web用户代理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}。

【问题定位】 因为url加载的网页是电脑网页,所以不做任何适配的话,在手机端加载的电脑网页会显示异常。

因此对于同一个url的网页,需要适配多种设备,例如: 平板,手机,电脑等,而且适配多种设备型号,比如Mate60,Mate60 Pro。 【分析结论】 需要:

  1. 设备端能够传给网页设备的标识。
  2. 网页开发者能够根据设备的标识做对该网页对相应的设备做样式的适配。

【修改建议】

  1. 通过设置UserAgent,把设备端标识信息传递给网页,因此网页端可以通过deviceType识别设备类型。
aboutToAppear(): void {
  webview.once('webInited', () => {
    try {
      // 应用侧用法示例,定制UserAgent。
      this.ua = this.controller.getUserAgent() + 
      'Mozilla/5.0 ({deviceType}; {OSName} {OSVersion}) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/{ArkWeb VersionCode} {Mobile}';
      this.controller.setCustomUserAgent(this.ua);
    } catch (error) {
      console.error(`ErrorCode: ${(error as BusinessError).code},  Message: ${(error as BusinessError).message}`);
    }
  })
}
  1. 网页侧通过userAgent,获得设备端标识信息,代码示例如下:
<script>
  window.onload = function() {
    const resultText = document.getElementById("result");
    // 获得userAgent
    resultText.innerHTML = navigator.userAgent;  
  }
</script>
  1. 在Web的onControllerAttached里面设置UserAgent。
@State userAgent:string = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 ArkWeb/4.1.6.1 Mobile automobile/792 HuaweiBrowser'
Web({ src: '', controller: this.controller})
  .onControllerAttached(()=>{
    this.controller.setCustomUserAgent(this.userAgent);
    this.controller.loadUrl('xxxxxx')
})

【总结】 网页开发者需要根据设备端传递的设备信息对网页做相应的适配,以适配多种设备以及设备型号。

更多关于HarmonyOS 鸿蒙Next中url适配的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


那就直接请求移动端的地址

在HarmonyOS Next中,URL适配主要涉及ArkTS声明式开发范式,通过URL模块处理网络资源访问。系统提供统一的URL解析和构造API,支持标准URI格式,包括协议、主机、路径和查询参数。开发者需使用鸿蒙提供的网络接口进行数据请求,确保应用在分布式架构下实现跨设备资源调用。URL适配需遵循鸿蒙安全规范,对敏感数据采取加密传输。

在HarmonyOS Next中,Web组件默认会基于User-Agent识别设备类型。若加载的URL显示为电脑版网页,可通过以下方式适配移动端:

  1. 设置User-Agent: 在Web组件中配置移动端UA字符串:

    webview.getWebConfig().setUserAgent("Mozilla/5.0 (Linux; Android 10) Mobile")
    
  2. 视口元标签: 确保目标网页包含响应式视口配置:

    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    
  3. 媒体查询适配: 若为自研网页,建议通过CSS媒体查询实现响应式布局:

    [@media](/user/media) screen and (max-width: 768px) {
      /* 移动端样式 */
    }
    
  4. 强制移动端渲染: 部分网站支持通过URL参数指定视图模式,例如添加?mobile=1参数。

若网页本身未提供移动端适配,建议联系网站管理员优化响应式设计。Web组件本身不提供自动转码功能,需依赖服务端或前端适配。

回到顶部