企业微信内置应用的h5页面,内部按钮关闭页面

发布时间 2023-09-20 11:27:13作者: sinceForever

以下内容非原创,遇到这个问题,查到这位大佬的做法,所以记录下来,以便于之后自己查阅。

原文链接:https://blog.csdn.net/qq_22182989/article/details/125674826

遇到的问题:

在做vue项目时,需求是要在微信环境内。

微信h5页面要求前端控制退出时关闭页面功能。

如果是在微信外其他浏览器的话。可以直接使用Window.close即可关闭网页。

但是在微信环境却无法直接使用这个方法。

众所周知,微信小程序的js中不能使用window对象以及document对象。

什么原因呢?

难道他们真的不存在吗?事实并非如此。

这个问题稍后讨论。我会再写一篇文章专门说明这个问题。

今天暂时先解决问题:

解决办法:
温馨提示:有些同学照着一模一样的代码复制粘贴的。但是在微信开发者工具里面模拟微信环境操作。但是还是报错了:

因为必须要在真机环境才能成功!

WeixinJSBridge.call("closeWindow")
完整代码:

<script>
import {mapGetters} from 'vuex';
 
export default {
  data() {
    return {
      showNative: false,
      browserType: '', // 浏览器环境类型,wxpay:微信环境,alipay:支付宝环境
    }
  },
  computed: {
    ...mapGetters(['userInfo'])
  },
  methods: {
    logout() {
      console.log(window);
      console.log(this)
      if (this.browserType === "wxpay") {
        this.$toast('即将关闭页面!');
        this.closeWindow()
      } else {
        this.$store.dispatch('user/logout')
      }
    },
    /**
     * 如果是微信环境。退出就关闭窗口
     */
    closeWindow() {
      if (document.addEventListener) {
        document.addEventListener(
            "WeixinJSBridgeReady",
            function () {
              WeixinJSBridge.call("closeWindow")
              parent.WeixinJSBridge.call('closeWindow')
            },
            false
        );
      } else if (document.attachEvent) {
        document.attachEvent(
            "onWeixinJSBridgeReady", function () {
              //这个可以关闭ios系统的手机
              WeixinJSBridge.call("closeWindow");
            }
        );
      }
      // 必须加最后这一句,否则关闭不了
      WeixinJSBridge.call("closeWindow")
    },
    // 判断浏览器类型
    checkBrowser() {
      const browser = navigator.userAgent.toLowerCase();
      if (browser.match(/Alipay/i) == "alipay") {
        // 支付宝环境
        return "alipay";
      } else if (browser.match(/MicroMessenger/i) == "micromessenger") {
        // 微信内置浏览器
        return "wxpay";
      }
      // 其他h5环境
      return "";
    },
  },
  mounted() {
    // 判断环境
    // 获取浏览器类型,微信浏览器,支付宝浏览器,普通手机浏览器
    this.browserType = this.checkBrowser();
  },
  created() {
 
  }
}
</script>

什么是WeixinJSBridge?
WeixinJSBridge不同于jssdk,不需要鉴权,是微信内置浏览器自带的接口。

大致有以下几个有用的知识点(各功能具体方法请看原文):

分享给好友
分享到朋友圈
分享到微博
隐藏下方工具栏
隐藏微信右上角分享按钮(并非隐藏三个点,而是里面的菜单)
关闭浏览器回到公众号对话窗口
Vue中只需要定义好方法,在页面初始化中调用即可。

注意:(WeixinJSBridge只能在微信环境内打开的网页有效)
————————————————
版权声明:本文为CSDN博主「南北极之间」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_22182989/article/details/125674826