uni-app android nvue webview页面未传设置的user agent数据
uni-app android nvue webview页面未传设置的user agent数据
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Mac | 11.2.3 | HBuilderX |
操作步骤:
- manifest app-plus节点下添加
"useragent" : { "value" : "testapp", "concatenate" : true } - nvue页面template里添加一个webview
- 链接地址为一个测试UA的网址:https://useragent.buyaocha.com/
- 观察ua情况,是否有testapp
预期结果:
能够正确传出ua,供服务器端使用。
实际结果:
无法传出。
bug描述:
android nvue页面内添加的webview(指直接写在template里的,非plus.webview.open方式创建的),无法传递manifest里设置的useragent数据。
ios正常
之前有人说用plus.webview.open创建可以传递ua,确实可以,但是不满足业务需求,plus.webview.open创建出来的在nvue里无法使用uni.postMessage与APP通信。
更多关于uni-app android nvue webview页面未传设置的user agent数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html
upup
更多关于uni-app android nvue webview页面未传设置的user agent数据的实战教程也可以访问 https://www.itying.com/category-93-b0.html
嗯 建议先使用vue页面的web-view先玩
vue里的web-view有个问题,它不能设置高度,只能撑满页面,不满足业务需求。还是只能盼星星盼月亮,盼nvue的webview能带自定义UA。
回复 njtv: 嗯 问题我会反馈
回复 DCloud_Android_ST: nvue下用this.$scope.$getAppWebview().children()无法获取当前nvue组件下的webview对象,用plus.webview.currentWebview()获取下来的无法调用back()返回事件
nvue里面怎么设置webview撑满全屏?写在template里的
试试flex:1或者js动态获取高,webview动态设置
upupup
在处理UA的问题了
回复 DCloud_Android_ST: 还没有解决
还没有解决
这是一个已知的Android平台上的限制。在nvue页面中直接嵌入的webview组件与通过plus.webview.open创建的webview在实现机制上存在差异。
关键问题在于:Android平台上,nvue内直接使用的webview组件不会自动继承manifest中配置的useragent设置。而iOS平台由于系统机制不同,能够正常传递。
目前可行的解决方案是:
- 通过evalJS动态设置UA(推荐)
在webview的
@onload事件中,通过执行JavaScript代码来修改navigator.userAgent:
onWebviewLoad() {
const wv = this.$refs.webview;
wv.evalJS(`
Object.defineProperty(navigator, 'userAgent', {
value: '${navigator.userAgent} testapp',
configurable: false
});
`);
}
- 使用plus.webview.create并处理通信 虽然您提到plus.webview.open无法使用uni.postMessage,但可以尝试使用webview的evalJS方法配合自定义事件来实现双向通信:
const wv = plus.webview.create(url, id, {
useragent: 'testapp'
});
// 通过evalJS实现通信
wv.evalJS('window.uni = { postMessage: function(data) { ... } }');

