收藏
回答

判断是否在小程序web-view环境

看到帖子说安卓的webview UA带有miniprogram,而iOS没有
而iOS的window.__wxjs_environment === 'miniprogram'是有效的,部分安卓似乎无效
那么可不可以这么判断, 以获得一个准确的结果:

const isInWechatMP = () => {
        return (navigator.userAgent.match(/micromessenger/i) && navigator.userAgent.match(/miniprogram/i)) || window.__wxjs_environment === 'miniprogram';
};

期待官方答复!

回答关注问题邀请回答
收藏

4 个回答

  • 🇯 🇮 🇪
    🇯 🇮 🇪
    2021-05-13


    微信 sdk 1.6.0 实际上也是用 __wxjs_environment 判断,看来 getEnv 也不靠谱哦。

    https://res.wx.qq.com/open/js/jweixin-1.6.0.js

    getEnv: function(e) {
         O(function() {
            e({ miniprogram: 'miniprogram' === o.__wxjs_environment })
         })
    }
    
    2021-05-13
    有用 1
    回复
  • GM
    GM
    2020-08-06

    2020-08-06
    有用
    回复
  • 凡羽
    凡羽
    2018-12-21

    貌似可以这样检测的,得到了官方答复


    2018-12-21
    有用
    回复
  • 半寸灰
    半寸灰
    2018-09-18


    https://developers.weixin.qq.com/miniprogram/dev/component/web-view.html

    wx.miniProgram.getEnv


    2018-09-18
    有用
    回复 4
    • 半寸灰
      半寸灰
      2018-09-18回复凡羽

      那还不简单

      web-view  是要先设置    src  你直接在url后面加个  参数 说明这是小程序   比如  https://xxxx?type=mp


      然后js问题  了

      比如  location.href   看看链接有没有这个参数



      2018-09-18
      1
      回复
    • 凡羽
      凡羽
      2018-09-18

      官方的方法的缺陷是不能够立即判断。如果想立即判断,就要通过UA,或者其他的方式。我想要知道iOS的window.__wxjs_environment === 'miniprogram'是不是在更高一级的层面写入的,我测下来,iOS的每次都可以判断成功,想得到官方证实。

      2018-09-18
      回复
    • 凡羽
      凡羽
      2018-09-18回复半寸灰

      url加参数是一个解决方案,但是如果是人为的投放url,有可能会造成出错,把非小程序webview环境,也判断为webview环境。

      2018-09-18
      回复
    • J.Y
      J.Y
      2019-08-27回复半寸灰
      简单粗暴实用,就这个了。window.__wxjs_environment 有兼容性问题 wx.getEnv 是个异步而且需要引入sdk,都是弊端
      2019-08-27
      回复
登录 后发表内容