js关闭当前页面

    技术2022-07-11  87

    高程三截图

    window.cloce()方法看似可以关闭打开的窗口,可是《高程三》已经明确指出这个方法仅适用于通过window.open()打开的窗口。

    网上摘抄来这么一段代码,通过userAgent检测浏览器类型,然而这三种情况都是打开了空页面😣

     

    var userAgent = navigator.userAgent; if (userAgent.indexOf("Firefox") != -1 || userAgent.indexOf("Chrome") !=-1) { window.location.href="about:blank"; }else if(userAgent.indexOf('Android') > -1 || userAgent.indexOf('Linux') > -1){ window.opener=null;window.open('about:blank','_self','').close(); }else { window.pener = null; window.open("about:blank", "_self"); window.close(); }

    由于我最近在做支付,所以涉及到的就是微信、支付宝、百度钱包、京东、QQ等,在内置浏览器中支付完成或者提示用户错误信息之后关闭页面,由于在微信、支付宝、百度钱包中,他们对页面关闭进行了封装,传统的window.close()是无效的,必须要使用它们的js代码才能关闭。

    所以下面是三种关闭的方法(其他的暂时还没有找到):

     

    WeixinJSBridge.call('closeWindow');//微信 AlipayJSBridge.call('closeWebview'); //支付宝 关闭窗口(别名) AlipayJSBridge.call('exitApp'); // 支付宝 (退出当前H5应用) AlipayJSBridge.call('popWindow',{ // 关闭窗口,可传递参数 data: { } }); BLightApp.closeWindow();//百度钱包

    阿里的文档阿里文档2 有时支付宝的关闭在安卓上面不是很好用,原因是当页面加载完后会创建 AlipayJSBridge对象,同时会触发AlipayJSBridgeReady事件,当执行AlipayJSBridge.call('closeWebview')操作时,AlipayJSBridge还没有创建,所以无法执行。因此我们需要对AlipayJSBridgeReady事件进行监听。

     

    document.addEventListener('AlipayJSBridgeReady',function(){ AlipayJSBridge.call('closeWebview'); })

    通过浏览器的头判断是那种浏览器:

     

    var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger/i)=="micromessenger") { alert("微信客户端"); } else if(ua.indexOf("alipay")!=-1){ alert("支付宝客户端"); }else if(ua.indexOf("baidu")!=-1){ alert("百度客户端"); }

    保存历史记录:

     

    window.addEventListener("popstate", function(e) { var state = { title: "title", url: "#" }; window.history.pushState(state, "title", "#"); }, false);

    popstate 点击后退按钮触发history.pushState接收三个参数:状态对象、新状态的标题、可选的相对URL;

     

    Processed: 0.013, SQL: 9