最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS區(qū)分瀏覽器頁面是刷新還是關閉

 更新時間:2016年04月17日 15:23:55   作者:冰輪封雪  
在web開發(fā)中我們經常各種各樣的需求。今天小編給大家介紹JS區(qū)分瀏覽器頁面是刷新還是關閉標簽頁,非常實用,感興趣的童鞋參考下吧

Web開發(fā)者在系統(tǒng)開發(fā)中經常要面對產品經理各式各樣的需求,當然,大部分對產品體驗還是有幫助的,例如我們今天提到的刷新頁面,前進后退,關閉瀏覽器標簽時,為了避免用戶誤操作,需給出二次確認提示框,這個相信大家都非常熟悉了,采用瀏覽器提供的BOM事件機制就可以解決,使用window對象的onbeforeunload事件即可,如果產品經理只提出這樣的需求,那確實無可厚非,然而其需要的不僅僅是這些...

例如,我們一次項目開發(fā)中,產品經理就針對我們的實現提出了“改進方案”:

你們這彈出框太丑了,跟系統(tǒng)整體風格不搭調啊,不能使用咱們自己組件庫中的Dialog嗎?很好的問題...我只想說,you can you up...

你們這刷新和關閉標簽頁中展示的文案一樣啊,需要區(qū)分對待下,刷新提示XXX,關閉時提示SSS,這樣用戶才能更明確。恩,考慮到了用戶的體驗,很好,我還是想說,you can you up...其實,瀏覽器在關閉和刷新時,本身已經區(qū)別對待了,提示是不同的,只不過我們自定義的部分并不能顯示不同的文案而已;當然,也有一些hack的方法,但是很難適應多個瀏覽器,各瀏覽器內部對于關閉標簽頁和刷新的實現機制會有所不同;

你們每次登錄進來,為什么要延時10秒,才讓坐席簽入電話系統(tǒng)啊(我們做的是客服系統(tǒng))?能不能把這個限制去掉啊,用戶體驗太不好了!我們也想去掉啊,但是電話系統(tǒng)頻繁簽入簽出會有問題,用戶刷新了瀏覽器,再次簽入,如果相隔時間很短的話,電話系統(tǒng)會出現故障,為了避免這個問題,我們才加上了這個限制,但是回過頭來思考,就可以進入我們今天討論的主題了;

區(qū)分刷新與關閉標簽頁

我們無法根據瀏覽器事件區(qū)分刷新還是關閉標簽頁,進而在相應動作觸發(fā)前,執(zhí)行不同的動作,但是對于上文中產品提出的第三點意見,其實還是可以考慮優(yōu)化一下的,就是只有在刷新的時候延時10秒,新登錄或關閉標簽頁一段時間之后再進來時不延時;

要做到這點其實也很簡單,使用瀏覽器的本地存儲機制就可以實現,例如cookie,LocalStorage等,這里就不能使用SessionStorage了,因為本次回話結束后,該緩存就失效了;由于在cookie中存儲會增加cookie的字節(jié)數,每次請求中相應的網絡傳輸量會增加,因此,我們采用了LocalStorage;其操作很簡單,我們使用的前端框架是AngularJS,具體如下:

const MAX_WAIT_TIME = 10;
const currentDate = new Date().getTime();
const lastestLeaveTime = parseInt(this.$window.localStorage.getItem('lastestLeaveTime'), 10) || currentDate;
this.secondCounter = Math.max(MAX_WAIT_TIME - Math.ceil((currentDate - lastestLeaveTime) / 1000), 0);
if (this.secondCounter > 0) {
this.logoutTimeInterval = this.$interval(()=> {
this.secondCounter--;
this.$scope.$digest();
}, 1000, this.secondCounter, false).then(() => {
this.updateByStatus(this.AvayaService.status.OFFLINE);
});
} else {
this.updateByStatus(this.AvayaService.status.OFFLINE);
}

上面代碼主要作用是,進入系統(tǒng)后,會先去LocalStorage中獲取上次退出時的時間,再獲取當前時間,兩個時間進行減法,如果值小于10秒,我們就認為這是刷新,如果值大于10秒,我們認為是關閉標簽頁或新登錄,進而可以執(zhí)行不同的方法,讓客服有更好的體驗,不用每次進入系統(tǒng)都要等待10秒才能簽入電話系統(tǒng)了,產品經理還是很重要的,吼吼,要不是他的疑問,可能我們也不會來優(yōu)化這個地方了...當然,其實RD也要逐漸培養(yǎng)這種用戶體驗至上的思維,哪怕有一點可提升客服效率的地方,都值得我們花時間來優(yōu)化;

下面把相關退出的代碼也貼一下吧,前面忘說了,不管是刷新,還是關閉標簽頁,只要是頁面銷毀,我們都會去執(zhí)行登出電話系統(tǒng)的操作,所以每次進來后需要重新簽入;

//刷新頁面或者關閉頁面
$window.onbeforeunload = () => {
return '操作將會導致頁面數據清空,請謹慎操作...';
};
//每次頁面unload時,設置LocalStorage時間;
$window.onunload = () => {
$window.localStorage.setItem('lastestLeaveTime', new Date().getTime());
};

我們可能還注意到一些問題,那就是刷新,關閉頁面,前進后退,你需要跳出瀏覽器默認二次確認框,但是用戶點擊退出系統(tǒng)按鈕,則必須彈出自己組件庫中的Dialog了,還必須不能兩個都彈出,具體代碼如下:

onStatusClick(index, name) {
if (name === '退出') {
this.mgDialog.openConfirm({
showClose: false,
template: 'app/header/logoutDialog.html',
controller: 'HeaderDialogController as dialog',
data: {
'title': '您確定要退出系統(tǒng)嗎?'
}
}).then(() => {
this.$window.location.href = '/logout';
this.$window.onbeforeunload = null;
});
} else {
// 內部操作,大家不用管
...
}
}

以上所述是小編給大家介紹的JS區(qū)分瀏覽器頁面是刷新還是關閉的全部內容,希望對大家有所幫助!

相關文章

  • js中如何獲取JSON數組的長度

    js中如何獲取JSON數組的長度

    這篇文章主要介紹了js中如何獲取JSON數組的長度問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 淺談Webpack自動化構建實踐指南

    淺談Webpack自動化構建實踐指南

    本篇文章主要介紹了Webpack自動化構建實踐指南,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • javascript 代碼是如何被壓縮的示例代碼

    javascript 代碼是如何被壓縮的示例代碼

    這篇文章主要介紹了javascript 代碼是如何被壓縮的,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • nullJavascript中創(chuàng)建對象的五種方法實例

    nullJavascript中創(chuàng)建對象的五種方法實例

    今天上午,非常郁悶,有很多簡單基礎的問題搞得我有些迷茫,哎,代碼幾天不寫就忘。目前又不當COO,還是得用心記代碼哦!
    2013-05-05
  • JavaScript獲取DOM元素的11種方法總結

    JavaScript獲取DOM元素的11種方法總結

    這篇文章主要介紹了JavaScript獲取DOM元素的11種方法總結,本文用分4大類11個方法總結如何獲取DOM元素,需要的朋友可以參考下
    2015-04-04
  • 簡單談談JS中的正則表達式

    簡單談談JS中的正則表達式

    下面小編就為大家?guī)硪黄唵握務凧S中的正則表達式。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 9個javascript語法高亮插件 推薦

    9個javascript語法高亮插件 推薦

    語法高亮效果使用非常頻繁,特別是在博客里展示各種代碼的時候,可以讓代碼更易讀。我們身邊就有很多語法高亮的插件,其中大部分是用javascript寫的,也有一些是通過server端語言實現(比如Phyton或Ruby)。
    2009-07-07
  • 讓JavaScript和其它資源并發(fā)下載的方法

    讓JavaScript和其它資源并發(fā)下載的方法

    這篇文章主要介紹了讓JavaScript和其它資源并發(fā)下載的方法,JavaScript并發(fā)下載主要目的在于解決JS加載會阻礙頁面呈現的問題,需要的朋友可以參考下
    2014-10-10
  • JavaScript 命名空間 使用介紹

    JavaScript 命名空間 使用介紹

    使用JavaScript實現命名空間就沒有這么舒服了,Javascript只有函數作用域,什么塊兒啊、神馬文件啊統(tǒng)統(tǒng)都認為是一個命名空間的,有時候因為一些重名問題導致的錯誤讓人莫名其妙,難以調試解決
    2013-08-08
  • JavaScript 放大鏡 放大倍率和視窗尺寸

    JavaScript 放大鏡 放大倍率和視窗尺寸

    對JavaScript 放大鏡來說, 計算倍率必不可少.一個完整的放大鏡結構里, 與倍率扯上關系的一共有 4 個對象, 原圖, 縮略圖, 鏡片和視窗.
    2011-05-05

最新評論

土默特左旗| 工布江达县| 榕江县| 通许县| 新巴尔虎右旗| 临洮县| 宁强县| 九龙坡区| 汽车| 德阳市| 宁德市| 页游| 敦煌市| 广灵县| 贡嘎县| 奉贤区| 镇安县| 农安县| 稻城县| 北票市| 嘉义市| 屏边| 平凉市| 若尔盖县| 微博| 沈阳市| 汶上县| 云安县| 都匀市| 元氏县| 彰化市| 威远县| 吐鲁番市| 车致| 舒兰市| 松原市| 安康市| 乳源| 桓仁| 深泽县| 榆社县|