uni-app android nvue webview页面未传设置的user agent数据

uni-app android nvue webview页面未传设置的user agent数据

开发环境 版本号 项目创建方式
Mac 11.2.3 HBuilderX

操作步骤:

  1. manifest app-plus节点下添加
    "useragent" : {
        "value" : "testapp",
        "concatenate" : true
    }
    
  2. nvue页面template里添加一个webview
  3. 链接地址为一个测试UA的网址:https://useragent.buyaocha.com/
  4. 观察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

12 回复

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平台由于系统机制不同,能够正常传递。

目前可行的解决方案是:

  1. 通过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
        });
    `);
}
  1. 使用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) { ... } }');
回到顶部