小程序内的web-view所打开的页面获取的userAgent中不包含小程序特征,无法识别是在小程序web-view中打开的页面,而在安卓端或开发者工具端web-view的UA中都有miniprogram或miniProgram关键字。
官方文档所提供的
window.__wxjs_environment
这种方式实际使用起来诸多不便(需等待WeixinJSBridge,以及接口调用需单独传参),希望能在UA中加入特征字符串,感谢。
框架类型 | 问题类型 | 操作系统 | 操作系统版本 | 手机型号 | 微信版本 |
---|---|---|---|---|---|
小程序 | Bug | iOS | 11.4 | iPhone6S Plus | 6.7.0 |
目前因为iOS低版本系统的原因没有处理UA,这里我们会想办法解决。
如果是前端判断小程序环境,想要同步的方法,需要兼容一下,在iOS可以同步取得 window.__wxjs_environment,在安卓则判断UA上是否有miniprogram
官方文档上说微信7.0.0以上才可以通过判断
userAgent
中包含miniProgram
字样来判断小程序web-view环境,但是我在安卓微信 6.7.2 中发现userAgent
中包含miniProgram,这个是否需要对低版本做兼容?异步获取真的很难受。。。
感谢反馈,之前由于实现上的问题没有处理UA,后续我们会优化
希望能及时更新优化, 目前 webview 内嵌 h5 页面判断小程序环境十分麻烦,
window.__wxjs_environment 有设备兼容性差异,判断不准
wx.miniProgram.getEnv() 这个是一个异步方法, 我们希望能有一个同步判断小程序环境的方法
优化个鬼,安卓7.0.4.1420(0x27000435)版本居然把miniProgram标识干掉了,大写的服
请问这个问题现在解决了么?ios中的window.__wxjs_environment是异步的么
这个必须顶!我们是通过url加上标志来同步判断小程序环境的。为了防止多个页面跳转丢失,就把标志参数写入cookie,不设置过期参数,理论是session级别。然鹅,webview销毁时候cookie并不清除。小程序webview又和微信webview cookie共享,导致只要在微信打开的页面都判断是小程序环境,很崩溃...如果UA加上标志那可是省了不少麻烦
webview销毁时候cookie并不清除
--------------- 这个可以用sessionStorage啊
关键是服务端,不能直接判断
我现在也遇到了这样的问题
可能只能降级处理,都当成是在微信的浏览器中处理
因为支付问题,必须得做判断,我是在小程序进来的地址里加参数来判断的。
php 我是这么判断的,安卓目前没问题。不知道兼容性怎样。苹果的还没测。
function containsMiniProgram($string) {
return strpos($string, 'miniProgram') !== false;
}
function in_wxapp_mini() {
// 获取用户代理字符串
$userAgent = $_SERVER['HTTP_USER_AGENT'];
//Mozilla/5.0 (Linux; Android 12; ABR-AL00 Build/HUAWEIABR-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.103 Mobile Safari/537.36 XWEB/1300149 MMWEBSDK/20241101 MMWEBID/5064 MicroMessenger/8.0.54.2760(0x280036CC) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64
//Mozilla/5.0 (Linux; Android 12; ABR-AL00 Build/HUAWEIABR-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.103 Mobile Safari/537.36 XWEB/1300149 MMWEBSDK/20241101 MMWEBID/5064 MicroMessenger/8.0.54.2760(0x280036CC) WeChat/arm64 Weixin NetType/WIFI Language/zh_CN ABI/arm64 miniProgram/wx99a9d7f497de"
//dump($userAgent);
//die;
// 检查是否包含微信小程序的标识
if(containsMiniProgram($userAgent) ){
return true;
}
return false;
}
请问这个问题有结论了吗,是否已优化完成呢
请问这个问题有结论了吗?我这边试了iphonex的小程序webview的ua里面是带miniProgram的,不知有没有覆盖到所有ios
服务端不能直接判断,有什么解决方法吗? 我需要知道webview中用户的ua 到底是什么?比如说ios或者是Android。。。