用vue做的項目,有個需求就是關閉瀏覽器的時候种玛,需要往后臺提交有個接口赂韵,來監(jiān)聽這個賬號有沒有下線。
網(wǎng)上找了很多種方法肄满,一直沒有實現(xiàn)稠歉。
主要困惑點:
1、瀏覽器關閉是事件怒炸,是什么
onbeforeunload阅羹、onunload? 又是各種百度教寂,
window.addEventListener( ‘beforeunload’,e =>(
執(zhí)行…
) )
mounted () {
? ? window.addEventListener('beforeunload', e => {
? ? ? window.localStorage.removeItem('titleName')
? ? });
? },
mounted () {
? ? window.addEventListener( 'beforeunload', e => this.set() );
? },
? methods:{
set(){
console.log('我是要調(diào)用的函數(shù)')
}
? }
把請求接口放到 set中孝宗,關閉瀏覽器的時候是可以請求接口了因妇,但是,刷新時候也請求狡忙,不符合要求灾茁。北专。拓颓。。然后又是各種百度
2驶睦、怎么區(qū)分瀏覽器刷新與關閉(網(wǎng)上找的方法场航,不知道出處是哪里,)
var _beforeUnload_time = 0,_gap_time=0;
window.onunload=function(){
? _gap_time=new Date().getTime()-_beforeUnload_time;
? if(_gap_time<=5){
? //瀏覽器關閉
????$.ajax({
? ? ? ? ? ? ? ? ? url:'/movecheck/logout',
? ? ? ? ? ? ? ? ? // dataType:"JSON",
? ? ? ? ? ? ? ? ? cache:false,
? ? ? ? ? ? ? ? ? type:'post',
? ? ? ? ? ? ? ? ? async:false,
? ? ? ? ? ? ? ? ? success:function(dt){
? ? ? ? ? ? ? ? ? //? console.log(dt)
? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? error:function(dt){
? ? ? ? ? ? ? ? ? }
? ? ? ? ? })
? }
}
window.onbeforeunload=function(){
? _beforeUnload_time=new Date().getTime();
}
});
確實溉痢,這個方法是可以區(qū)分瀏覽器是刷新還是 關閉僻造,所以我就把上面的方法里面的ajax方法改成 axios,結(jié)果不如意孩饼,根本不會執(zhí)行axios接口嫡意,ajax中有個配置async:false,發(fā)現(xiàn)axios中沒有,又各種百度捣辆,沒有找到解決方法。
突然靈機一動此迅,第一個是 能執(zhí)行接口汽畴,但是區(qū)分不了刷新與關閉,第二個能區(qū)分刷新與關閉耸序,執(zhí)行不了接口忍些,那為何不把這兩個結(jié)合起來,哈哈哈哈坎怪。罢坝。。嘁酿。。恩游桩,問題解決了(機智如我)
addEventListener筛峭,好好看看這個事件奶稠,不說了