HarmonyOS鸿蒙Next中Webview打开部分网站显示的是桌面端UI,请问这是什么原因

HarmonyOS鸿蒙Next中Webview打开部分网站显示的是桌面端UI,请问这是什么原因? 求赐教!

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/{ChromeCompatibleVersion}.0.0.0 Safari/537.36 ArkWeb/{ArkWeb VersionCode} {DeviceCompat} {扩展区}

定位思路

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

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

需要:

设备端能够传给网页设备的标识。

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

解决方案

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}`);
    }
  })
}

2.网页侧通过userAgent,获得设备端标识信息,代码示例如下:

window.onload = function(){
  const resultText = document.getElementById("result");
  // 获得userAgent
  resultText.innerHTML = navigator.userAgent;  
}

3.在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中Webview打开部分网站显示的是桌面端UI,请问这是什么原因的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


开发者您好,默认显示为桌面端Ul的问题,可以通过设置用户代理(User Agent)来尝试解决此问题。这是因为网站通常会根据访问设备的用户代理来决定显示那个版本的UI。

参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-webview-V13#setcustomuseragent10

在HarmonyOS鸿蒙Next中,Webview显示桌面端UI是因为网站使用了响应式设计,根据User-Agent识别设备类型。鸿蒙Next的Webview默认可能携带桌面浏览器标识,导致网站返回桌面版页面。可通过修改Webview的User-Agent设置为移动端标识来强制加载移动版UI。具体操作为在Webview初始化时调用setUserAgentString()方法,传入移动端UA字符串。这种情况与浏览器内核的默认行为有关,非系统bug。

在HarmonyOS Next中,ArkWeb(Webview)显示桌面端UI的问题通常与以下原因有关:

  1. User-Agent设置:ArkWeb默认可能使用桌面端User-Agent,导致网站服务器返回桌面版页面布局。这是Webview的常见行为设计。

  2. 视口元标签处理:部分网站依赖<meta name="viewport">标签适配移动端,如果该标签缺失或ArkWeb处理方式不同,会导致桌面布局渲染。

  3. 分辨率适配策略:HarmonyOS Next设备可能具有较高的屏幕DPI,某些网站会将其识别为桌面设备。

  4. ArkWeb引擎特性:作为新一代浏览器内核,ArkWeb可能更倾向于展示网站的完整桌面体验。

建议通过以下方式验证:

  • 检查Webview初始化时是否设置了移动端User-Agent
  • 查看目标网站是否有专门的移动端适配逻辑
  • 测试不同分辨率设备下的显示效果

该行为通常是预期设计,如需强制移动版显示,需要开发者主动配置Webview参数。

回到顶部