
高程三截圖
window.cloce()方法看似可以關閉打開的窗口,可是《高程三》已經(jīng)明確指出這個方法僅適用于通過window.open()打開的窗口。
網(wǎng)上摘抄來這么一段代碼,通過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等,在內(nèi)置瀏覽器中支付完成或者提示用戶錯誤信息之后關閉頁面,由于在微信、支付寶、百度錢包中,他們對頁面關閉進行了封裝,傳統(tǒng)的window.close()是無效的,必須要使用它們的js代碼才能關閉。
所以下面是三種關閉的方法(其他的暫時還沒有找到):
WeixinJSBridge.call('closeWindow');//微信
AlipayJSBridge.call('closeWebview'); //支付寶 關閉窗口(別名)
AlipayJSBridge.call('exitApp'); // 支付寶 (退出當前H5應用)
AlipayJSBridge.call('popWindow',{ // 關閉窗口,可傳遞參數(shù)
data: {
}
});
BLightApp.closeWindow();//百度錢包
阿里的文檔
阿里文檔2
有時支付寶的關閉在安卓上面不是很好用,原因是當頁面加載完后會創(chuàng)建 AlipayJSBridge對象,同時會觸發(fā)AlipayJSBridgeReady事件,當執(zhí)行AlipayJSBridge.call('closeWebview')操作時,AlipayJSBridge還沒有創(chuàng)建,所以無法執(zhí)行。因此我們需要對AlipayJSBridgeReady事件進行監(jiān)聽。
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 點擊后退按鈕觸發(fā)
history.pushState接收三個參數(shù):狀態(tài)對象、新狀態(tài)的標題、可選的相對URL;