8***@qq.com
8***@qq.com
  • 发布:2019-08-05 00:08
  • 更新:2022-09-29 11:47
  • 阅读:3729

【报Bug】android 中 plus.navigator.setUserAgent 无效, 追加在了原有的userAgent 后面,而不是覆盖

分类:uni-app

详细问题描述

plus.navigator.setUserAgent 使用这个方法设置webview UserAgent 在 ios 设备中是完全应用了新设置的内容。但是在android 中 是在原有的 userAgent 后面追加了 新设置的内容;

[内容]

重现步骤

<template>
<web-view :src="viewUrl" @message="handleMessage"></web-view>
</template>

plus.navigator.setUserAgent( Mozilla/5.0 (Linux;U;Android 7.1.2;zh-cn;Galaxy Nexus Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36 );

[步骤]

[结果]
在 webview 的页面中获取 userAgent 后
ios 中 是新设置的userAgent

android 中是 在原有 userAgent 后面追加 新的userAgent

[期望]
希望 Android 中 也是完全新设置的userAgent 而不是 追加在原来的userAgent 后面

[如果语言难以表述清晰,拍一个视频或截图,有图有真相]

IDE运行环境说明

HBuilderX

[IDE版本号]
2.1.3.20190723

[windows版本号]

[mac版本号]
mac 10.14.5

uni-app运行环境说明

[运行端是h5或app或某个小程序?]
运行端是 app

[运行端版本号]

[项目是cli创建的还是HBuilderX创建的?如果是cli创建的,请更新到最新版cli再试]

[编译模式是老模板模式还是新的自定义组件模式?]

App运行环境说明

[Android版本号]

[iOS版本号]

[手机型号]

[模拟器型号]

附件

[IDE问题请提供HBuilderX运行日志。菜单帮助-查看运行日志,点右键打开文件所在目录,将log文件压缩成zip包上传]

[App问题请提供可重现问题的代码片段,你补充的细一点,问题就解决的快一点]

[App安装包或H5地址]

[可重现代码片段]

联系方式

[QQ]
809602518

2019-08-05 00:08 负责人:无 分享
已邀请:
Chroisen

Chroisen

请问这个bug修复了吗?

  • 4***@qq.com

    我也遇到这个问题了

    2019-09-11 21:53

有问

有问 - 生活,趣与失。

IOS不支持的。安卓测试过没问题。

8***@qq.com

8***@qq.com (作者)

请教下,你是怎么设置的?

<template>  
    <web-view :src="viewUrl" @message="handleMessage"></web-view>  
</template>  

export default {  
    name: 'redirect',  
    data() {  
        return {  
        viewUrl: '',  
        method: '',  
        androidAgent: "Mozilla/5.0 (Linux;U;Android 7.1.2;zh-cn;Galaxy Nexus Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36"  
        }  
    },  
    onLoad(query) {  
        const system = uni.getSystemInfoSync();  
        if (query.method) {  
            this.method = query.method;  
            this.viewUrl = `https://test.happytvtech.com/html/${query.method}.html?native=${native}&method=login`  
        }  
        plus.navigator.setUserAgent( this.androidAgent );  
    },    
}

我是以上方式设置的,然后在 webview 加载的页面里面获取 userAgent 请看附件

非常感谢你的回复,但是我这里的设置我实在找不出什么问题。
可以说下我应该怎么做吗?

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

manifest配置项
看看是不是这里有问题(concatenate:是否将value值作为追加值连接到默认userAgent值之后,true表示追加模式,若value不以空格字符开头,则在其前面自动添加空格字符。默认为false,即覆盖默认userAgent值。)

  • 8***@qq.com (作者)

    你好,我按照你说的在 manifest 中 设置了userAgent 但是设置后依旧还是 追加在 原来的userAgent 后面了

    "useragent": {

    "concatenate": false

    }

    2019-08-06 20:12

  • DCloud_uniCloud_WYQ

    回复 8***@qq.com: 单独配置一下安卓的看看还有问题吗

    2019-08-07 11:30

  • 8***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 你好,感谢你的回复,我在下面有个回复 就是直接吧 userAgent 写在了 "useragent" 属性中 如 "useragent": {"concatenate": false, "value": "我设置userAgent"} 运行后在android 上面依旧是追加在了 原有的userAgent 后面

    2019-08-07 16:58

  • 8***@qq.com (作者)

    并且我也试过单独在 "useragent_android" 属性上面设置 value 并设置 “ concatenate” 为 false 依旧是一样的结果。所以我认为这里是个bug :设置concatenate 在 android 上 无效

    2019-08-07 17:01

  • DCloud_uniCloud_WYQ

    回复 8***@qq.com: 把代码删减删减发上来我试试

    2019-08-07 18:34

  • 8***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 我发在下面的回复了,记得往下翻

    2019-08-08 08:38

  • 8***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 麻烦你有空看下这个问题哦

    2019-08-09 09:21

有问

有问 - 生活,趣与失。

uniapp支持ios端的设置了?
我用的是H5+,还不支持IOS的。

  • 8***@qq.com (作者)

    ios 可以的啊, 我这边现在是 android 有问题。

    2019-08-06 20:11

8***@qq.com

8***@qq.com (作者)

你好,我按照你说的在 manifest 中 设置了userAgent 但是设置后依旧还是 追加在 原来的userAgent 后面了附件是我设置的方式,你看这样对吗?

8***@qq.com

8***@qq.com (作者)

不管我在manifest.json 中如何设置


最后都是如下图

请问,应该怎么做呢?

8***@qq.com

8***@qq.com (作者)

concatenate 设置 true 或 false 都是 追加 这个bug 怎么破?

8***@qq.com

8***@qq.com (作者)

manifest.json 文件

{  
    "name" : "HappyTV",  
    "appid" : "__UNI__90E7BB0",  
    "description" : "基于uni-app开发的新闻/资讯类App模板",  
    "versionName" : "1.0.0",  
    "versionCode" : "100",  
    "transformPx" : false,  
    "app-plus" : {  
        "usingComponents" : true,  
        /* 5+App特有相关 */  
        "modules" : {  
            "OAuth" : {},  
            "Payment" : {},  
            "Share" : {},  
            "VideoPlayer" : {}  
        },  
        "nativePlugins" : {},  
        "splashscreen" : {  
            "waiting" : true  
        },  
        "useragent": {  
            "value": "Mozilla/5.0 (Linux;U;Android 7.1.2;zh-cn;Galaxy Nexus Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/71.0.3578.141 Mobile Safari/537.36",  
            "concatenate": false  
        }  
    },  
    /* SDK配置 */  
    "quickapp" : {},  
    /* 快应用特有相关 */  
    "mp-weixin" : {  
        /* 小程序特有相关 */  
        "appid" : "",  
        "setting" : {  
            "urlCheck" : false  
        },  
        "usingComponents" : true  
    },  
    "h5" : {  
        "router" : {  
            "base" : "/h5"  
        },  
        "template" : "h5.template.html",  
        "title" : "HappyTv",  
        "async" : {  
            "loading" : "AsyncLoading", //页面js加载时使用的组件(需注册为全局组件)  
            "error" : "AsyncError", //页面js加载失败时使用的组件(需注册为全局组件)  
            "delay" : 200, //展示 loading 加载组件的延时时间(页面 js 若在 delay 时间内加载完成,则不会显示 loading 组件)  
            "timeout" : 999999  
        }  
    }  
}

index.vue页面

<template>  
    <web-view :src="viewUrl" @message="handleMessage"></web-view>  
</template>  

<script>  
    var wv;//计划创建的webview  
    export default {  
        name: 'redirect',  
        components: {  
        },  
        data() {  
            return {  
                viewUrl: '',  
                method: '',  
            }  
        },  
        onLoad(query) {  
            const system = uni.getSystemInfoSync();  
            console.log('onLoad', JSON.stringify(query), JSON.stringify(system));  
            var native="";  
            // #ifdef APP-PLUS  
            native="2"  
            // #endif  
            this.viewUrl = `https://test.happytvtech.com/html/google.html?native=2&method=login`  
            // #ifdef APP-PLUS  
            var currentWebview = this.$mp.page.$getAppWebview() //获取当前页面的webview对象  
            setTimeout(function() {  
                wv = currentWebview.children()[0]  
                if (wv) wv.setStyle({top:system.statusBarHeight+44})  
            }, 1000); //如果是页面初始化调用时,需要延时一下  
            // #endif  
        },  
        mounted() {  
        },  
        onShow() {  
            console.log('onShow');  
        },  
        // onLoad() {  
        //  console.log('onReady redirect')  
        //  
        // },  
        methods: {  
            handleMessage(evt) {  
                console.log('接收到的消息:');  
            }  
        }  
    }  
</script>  

<style>  
</style>

https://test.happytvtech.com/html/google.html 这个链接在webview 中打开后,会打印出当前 页面的userAgent 数据,一眼就能看到

麻烦你了

8***@qq.com

8***@qq.com (作者)

这个问题我该怎么处理呢?

8***@qq.com

8***@qq.com (作者)

有人处理这个 bug 吗? 求各位大佬帮忙

8***@qq.com

8***@qq.com (作者)

有人处理这个 bug 吗? 求各位大佬帮忙

  • DCloud_uniCloud_WYQ

    确实有这个问题,你现在要实现什么功能,可以先曲线救国一下吗

    2019-08-10 17:25

  • 8***@qq.com (作者)

    回复 DCloud_uniCloud_WYQ: 没看到,不好意思回复晚了。 因为我现在要实现google 第三方登录,不会搞原生sdk 的方式,所以就使用webview 的方式登录,但是google第三方会根据原有webview 的userAgent 判断是用户是通过webview 方式登录,就会返回403 无权限状态码。所以网上给的解决方案都是修改webview 的userAgent 才行。我现在想不出应该还有其他方法。真的很抱歉哦,能给我点建议吗?

    2019-08-12 07:53

8***@qq.com

8***@qq.com (作者)

这个 bug 什么时候修复呢? 下个版本可以吗?

8***@qq.com

8***@qq.com (作者)

这个 bug 什么时候修复呢? 下个版本可以吗?

5***@qq.com

5***@qq.com

请问这个问题修复了吗?

Chroisen

Chroisen

请问这个bug什么时候修复呢?很久了耶,还是很重要的一个问题。

DCloud_heavensoft

DCloud_heavensoft

这个暂时无法解决,os给的能力就是这样。找其他绕过方案吧

uni应用验证问题

uni应用验证问题 - monkeyO

uni.uploadFile 设置自定义的UserAgent无效呢,怎么会出现俩呢

大帅锅

大帅锅

3.6.3上面,Android是不是会重置webview的UserAgent啊,我这边抓包拿到的一直是okhttp/3.12.11,但是我明明设置了自定义的UserAgent,iOS端是没问题的,这个要怎么处理啊???

现在怎么越升级问题越多啊,老版本可以使用IApp.startWebApp集成,现在新版本也不能这样集成了,好的东西都限制死了,uniapp也没有提供一个文档

该问题目前已经被锁定, 无法添加新回复