美文网首页
ionic3集成进微信公众号使用微信自带导航栏的方法

ionic3集成进微信公众号使用微信自带导航栏的方法

作者: 叶子丶恬 | 来源:发表于2018-01-19 11:55 被阅读0次

        将开发好的ionic3项目加入到微信公众号中,在微信浏览器访问,使用ionic的自带的导航栏难免会跟微信自带的导航有冲突,而且会出现双导航栏的现象,如下。

        问题一:在微信浏览器中,IOS系统跟安卓系统的返回机制又有不同,IOS的微信浏览器的导航是返回上一层,而安卓的微信浏览器的导航的返回是直接返回微信界面。所以去掉导航栏后要考虑好适配IOS的导航跟安卓的返回键。

        问题二:另一种情况是弹出了输入法和内置的选项,如:ion-datetime、ion-select等有弹出层的情况下,按下返回,应先去除弹出层,在按返回返回上一层。

        问题三:还有一种情况是部分人反映的跳转到首页后页面乱跳的问题。这个问题考虑了很久,依旧没有想到特别好的解决方案,所以目前只能做到返回到首页后不再跳转到任何页面,只停留在首页。

具体的实现逻辑是使用浏览器的popstate来接管浏览器的历史浏览记录,代码如下:

/**

  * 浏览器返回按钮及安卓返回键

  */

  backEvent(){

//设置一个在页面手动pop的初始标识

    window.sessionStorage.setItem('popFlag','0');

    window.addEventListener("popstate",()=>{

  //判断是否打开输入法键盘

      if(this.keyboard.isOpen()){

    //关闭键盘

        this.keyboard.close();

        history.pushState(null, null, location.href);

      }else{

          //获取NavController

          let activeNav: NavController = this.appCtrl.getActiveNav();

  //只有网址的情况,如:http://www.baidu.com

          if(location.href.indexOf("#")==-1){

    //设置返回首页的一个标识

            window.sessionStorage.setItem('backFlag',"backBtn");

            history.pushState(null, null, location.href);

            return;

          }

  //返回首页,历史记录的Url中有login,如:http://www.baidu.com/#/login

          if(location.href.indexOf("login")>-1){

//设置返回首页的一个标识

            window.sessionStorage.setItem('backFlag',"backBtn");

            history.pushState(null, null, location.href);

            return;

          }

  //非首页返回的登录页,历史记录的Url中有上一页面的记录,如:http://www.baidu.com/#/tabs/%E5%85%B3%E4%BA%8E%E6%88%91/password-modify

          if(location.href.indexOf("password-modify")>-1){

            this.rootPage = 'LoginPage'; 

            history.pushState(null, null, location.href);

            return;

          }else{

              //判断是否可以返回上一页

              if (activeNav.canGoBack()) {

                //取出在session中设置的手动pop标识

                let popFlag = window.sessionStorage.getItem('popFlag');

//popFlag  0:表示通过安卓返回键或通过IOS微信导航栏返回  1:手动返回

                if(popFlag != "1"){

                    //获取选项控件(如:弹出的时间控件、弹出的选项控件等。。)

                    let backdrop = document.getElementsByTagNameNS("http://www.w3.org/1999/xhtml","ion-backdrop");

                    if(backdrop.length>0){

  //模拟执行click操作,关闭控件

                      backdrop[0].click();

                      history.pushState(null, null, location.href);

                    }else{

                      activeNav.pop();

}

                }

//执行成功后将该标识重新设置成初始值

window.sessionStorage.setItem('popFlag',"0");

              }

          }

      }

    },false);

  }

        该方法直接放在app.component.ts的constructor中,在手动pop的地方将sessionStorage中的popFlag设置为1即可,

        在首页的的ionViewWillEnter勾子中要特殊处理一下。

        该方法能解决大部分问题项目运行在微信浏览器的问题,当然它不是完美的,如果有修改的地方请友情提出。

相关文章

  • ionic3集成进微信公众号使用微信自带导航栏的方法

    将开发好的ionic3项目加入到微信公众号中,在微信浏览器访问,使用ionic的自带的导航栏难免会跟微信自...

  • IONIC导航栏跳转同步

    问题点 在开发微信微官网的时候,会同时存在两个导航栏的情况:微信自带导航栏和WebApp内建导航栏。按照常理两者导...

  • 微信 公众号吸粉、增粉功能和技巧

    众所周知,搜狗微信是广大微信公众号运营者使用频率最高的微信导航站。一般大部分都会在搜狗微信上搜索公众号,查看公众号...

  • 微信公众号开发者

    微信公众号 普通订阅号功能能直接使用微信自带编辑器,生成图文消息,当需要使用部分功能时,仅仅使用微信的片机器不能满...

  • iOS集成微信支付

    刚集成完微信支付,总结总结 1. 准备 微信平台分为微信公众平台和微信开放平台,公众平台是运营微信公众号的管理系统...

  • 导航栏的一些知识点归纳

    总结来源:微信公众号“UCD耍家” 1、经常说的导航栏究竟是指哪里 ios中 导航栏是指在应用程序顶部,状态栏下方...

  • 1.1研习:微信后台与微信运营基本规范

    #微信后台与微信运营基本规范 ##微信后台概览:**基于个人公众号** 公众号菜单总栏 来到新媒体研习社第一周,第...

  • 跨公众号支付的实现方式

    做微信公众号开发和运营的人应该都知道微信上的微商城或者使用微信支付的网页,只能在自己的公众号上去使用,跨公众号使用...

  • 章法网络教你学习微信公众平台开发?

    一:认识微信公众平台简介 使用微信公众平台之前,首先需要在微信官方网站注册微信公众账号。微信公众账号分为订阅号、服...

  • 微信openid原理及支付过程中使用方案

    微信openid原理及支付过程中使用方案 一、 微信openid原理微信openid由微信公众号提供,是微信公众...

网友评论

      本文标题:ionic3集成进微信公众号使用微信自带导航栏的方法

      本文链接:https://www.haomeiwen.com/subject/vckooxtx.html