HarmonyOS 鸿蒙Next:Web组件在onControllerAttached事件中setCustomUserAgent导致viewport失效,页面表现如PC端浏览器而非移动端
HarmonyOS 鸿蒙Next:Web组件在onControllerAttached事件中setCustomUserAgent导致viewport失效,页面表现如PC端浏览器而非移动端 Web组件在onControllerAttached事件中setCustomUserAgent,会导致页面里面的viewport不起作用了。像是一个PC端浏览器,而不是移动端浏览器。
Web({
src: "",
controller: this.webviewController
})
.onControllerAttached(() => {
const ua = this.webviewController.getUserAgent() + '/xxx';
this.webviewController.setCustomUserAgent(ua);
this.webviewController.loadUrl(this.src)
})
如果设置了userAgent,那么viewport好像失去了效果,页面变得非常大,像PC端一样,而且可以放大缩小。
把 setCustomUserAgent去掉,效果又正常了。
这个问题怎么解,文档里面没有查到。
更多关于HarmonyOS 鸿蒙Next:Web组件在onControllerAttached事件中setCustomUserAgent导致viewport失效,页面表现如PC端浏览器而非移动端的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
楼主您尝试在Web组件里加上**.metaViewport(true)**这个属性,或者在设置的UA中手动加上‘Mobile’字段试试呢
更多关于HarmonyOS 鸿蒙Next:Web组件在onControllerAttached事件中setCustomUserAgent导致viewport失效,页面表现如PC端浏览器而非移动端的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
两个方式都可以。
我选择 .metaViewport
方法。
但是官方的文档有问题,如果设备为2in1,不支持viewport属性。设置为true或者false均不会解析viewport属性,进行默认布局。(我就是用的2in1的pad,确实需要设置这个才起作用。)
是一样的。看截图
这个非常好重现。就用百度的地址就可以了。我写了个demo。
```javascript
import { webview } from '[@kit](/user/kit).ArkWeb';
[@Entry](/user/Entry)
[@ComponentV2](/user/ComponentV2)
struct Index {
private webviewController: webview.WebviewController = new webview.WebviewController();
aboutToAppear() {
// 配置Web开启调试模式
webview.WebviewController.setWebDebuggingAccess(true);
}
build() {
Column() {
Web({
src: "https://m.baidu.com",
controller: this.webviewController
})
.onControllerAttached(() => {
const agent = this.webviewController.getUserAgent() + "/demo"
this.webviewController.setCustomUserAgent(agent)
})
}
.height('100%')
.width('100%')
}
}
我用webview调试工具,可以看到设置的agent的是成功的。
设置userAgent的截图:
没有设置自定义截图:
可以对比一下,会发现设置了自定义userAgent后,网页明显变大了,字看起来有点小。
这是通过webview调试工具截图的。在真实的机器上的效果也是这样的。
可以看下getUserAgent返回的值,看看是不是跟这文章里的UA一致,参考 设置UserAgent;如果还有问题的话,楼主是否方便提供显示有问题的Html网页,方便后续分析
你好,我回复在帖子下面,因为在这个里面回复不能贴图片。
userAgent没有问题的,我也在贴图,包括整个demo代码,能完美重现这个问题。
在HarmonyOS鸿蒙Next系统中,若Web组件在onControllerAttached
事件中调用setCustomUserAgent
方法后导致viewport
失效,页面表现如同PC端浏览器而非移动端,这通常是由于自定义User-Agent字符串可能未正确设置或影响了移动视口的默认行为。
setCustomUserAgent
方法用于设置Web组件的User-Agent字符串,该字符串用于告知服务器客户端的身份和特性。若设置不当,可能会影响页面的渲染模式,特别是移动视口的设置。
解决此问题的一种方法是检查自定义的User-Agent字符串是否包含必要的移动设备标识,确保它能被服务器正确识别为移动设备请求。此外,确认viewport
元标签是否正确设置,例如:
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
确保此标签在HTML文档的<head>
部分,并且没有被其他JavaScript代码或样式覆盖。
如果自定义User-Agent后确实需要特定的渲染模式,考虑在服务器端根据User-Agent调整响应的CSS和JavaScript,以适应不同的设备类型。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html,