JS區(qū)分瀏覽器中頁面刷新與關閉標簽頁

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

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

  1. 你們這彈出框太丑了柠辞,跟系統(tǒng)整體風格不搭調啊,不能使用咱們自己組件庫中的Dialog嗎主胧?很好的問題...我只想說叭首,you can you up...
  2. 你們這刷新和關閉標簽頁中展示的文案一樣啊,需要區(qū)分對待下踪栋,刷新提示XXX焙格,關閉時提示SSS,這樣用戶才能更明確夷都。恩眷唉,考慮到了用戶的體驗,很好囤官,我還是想說冬阳,you can you up...其實,瀏覽器在關閉和刷新時党饮,本身已經區(qū)別對待了肝陪,提示是不同的,只不過我們自定義的部分并不能顯示不同的文案而已刑顺;當然氯窍,也有一些hack的方法饲常,但是很難適應多個瀏覽器,各瀏覽器內部對于關閉標簽頁和刷新的實現(xiàn)機制會有所不同狼讨;
  3. 你們每次登錄進來不皆,為什么要延時10秒,才讓坐席簽入電話系統(tǒng)靶苈ァ(我們做的是客服系統(tǒng))?能不能把這個限制去掉啊能犯,用戶體驗太不好了鲫骗!我們也想去掉啊,但是電話系統(tǒng)頻繁簽入簽出會有問題踩晶,用戶刷新了瀏覽器执泰,再次簽入,如果相隔時間很短的話渡蜻,電話系統(tǒng)會出現(xiàn)故障术吝,為了避免這個問題,我們才加上了這個限制茸苇,但是回過頭來思考排苍,就可以進入我們今天討論的主題了;

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

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

要做到這點其實也很簡單具垫,使用瀏覽器的本地存儲機制就可以實現(xiàn),例如cookie试幽,LocalStorage等筝蚕,這里就不能使用SessionStorage了,因為本次回話結束后抡草,該緩存就失效了饰及;由于在cookie中存儲會增加cookie的字節(jié)數(shù),每次請求中相應的網絡傳輸量會增加康震,因此燎含,我們采用了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 '操作將會導致頁面數(shù)據清空惑芭,請謹慎操作...';
};
//每次頁面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 {
    // 內部操作岭接,大家不用管
    ...
  }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末富拗,一起剝皮案震驚了整個濱河市臼予,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啃沪,老刑警劉巖粘拾,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異创千,居然都是意外死亡缰雇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門追驴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寓涨,“玉大人,你說我怎么就攤上這事氯檐。” “怎么了体捏?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵冠摄,是天一觀的道長。 經常有香客問我几缭,道長河泳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任年栓,我火速辦了婚禮拆挥,結果婚禮上,老公的妹妹穿的比我還像新娘某抓。我一直安慰自己纸兔,他們只是感情好,可當我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布否副。 她就那樣靜靜地躺著汉矿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪备禀。 梳的紋絲不亂的頭發(fā)上洲拇,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音曲尸,去河邊找鬼赋续。 笑死,一個胖子當著我的面吹牛另患,可吹牛的內容都是我干的纽乱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼昆箕,長吁一口氣:“原來是場噩夢啊……” “哼迫淹!你這毒婦竟也來了秘通?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤敛熬,失蹤者是張志新(化名)和其女友劉穎肺稀,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體应民,經...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡话原,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了诲锹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片繁仁。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖归园,靈堂內的尸體忽然破棺而出黄虱,到底是詐尸還是另有隱情,我是刑警寧澤庸诱,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布捻浦,位于F島的核電站,受9級特大地震影響桥爽,放射性物質發(fā)生泄漏朱灿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一钠四、第九天 我趴在偏房一處隱蔽的房頂上張望盗扒。 院中可真熱鬧,春花似錦缀去、人聲如沸侣灶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炫隶。三九已至,卻和暖如春阎曹,著一層夾襖步出監(jiān)牢的瞬間伪阶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工处嫌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留栅贴,地道東北人。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓熏迹,卻偏偏與公主長得像檐薯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理坛缕,服務發(fā)現(xiàn)墓猎,斷路器,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,777評論 25 707
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫赚楚、插件毙沾、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,065評論 4 62
  • 這鬼天氣 這鬼天氣,真調皮宠页,昨日在秋天左胞,宛若夏季,薄裙短袖橫...
    拙蘭閱讀 794評論 10 19
  • 365天寫作訓練計劃宛如白居易所寫的那個猶抱琵琶半遮面,千呼萬喚始出來的琵琶女举户。 心心念念的訓練營終于拉開了帷幕,...
    四點半的洛杉磯閱讀 485評論 5 13