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;
网友评论