桌面通知顧名思義能夠給我們的日常工作和學習帶來很大的幫助,但是目前支持桌面通知功能的瀏覽器只有Chrome5+。本文主要介紹Web IM中桌面通知實戰技巧,下面一起來瞧瞧吧!
在實際使用的過程中,應該盡量減少通知功能對用戶的干擾,最大程度的減少通知功能的出現,這就需要解決以下幾個問題:
1. 收到多條消息時確保只出現一條通知;
2. 當用戶處于IM出現的頁面中時(頁面處于Focus狀態)將不出現通知;
3. 當用戶使用多Tab開啟多個存在IM的頁面時,只要有一個頁面處于Focus狀態將不出現通知;
此外,還需要解決一個便利性問題
4. 如何讓用戶點擊通知浮動層即可定位到具體的聊天窗口
1. 只彈出一個通知窗口
這個問題比較好解決,因為通知對象擁有一個名為"replaceId"的屬性。指定該屬性后,只要是相同replaceId的通知窗口彈出,都會覆蓋之前彈出的窗口。在實際項目中是給所有的彈出窗口賦了一個相同的replaceId。不過需要注意的是,這種覆蓋行為只在同域下有效。
2. 確保頁面Focus時不彈出通知窗口
這個問題主要是在于判斷瀏覽器窗口是否處于Focus狀態,目前除了監聽window的onfocus和onblur事件之外,貌似沒有更好的方式。在項目中就是通過這種方式來記錄窗口的Focus狀態,然后當消息到達時根據Focus狀態來判斷是否彈出窗口。 使用該方法需要注意的地方是,事件注冊的事件點應該盡可能的靠前,如果注冊太晚則當用戶打開頁面后再離開就會很容易出現狀態的誤判。
3. 識別多Tab的Focus狀態
多頁面間的狀態共享可以通過本地存儲來實現:
瀏覽器窗口Focus時修改本地存儲中指定key的值為"focus"
瀏覽器窗口Blur時修改本地存儲中指定key的值為"blur"
需要注意的是,Chrome下從一個Tab切換到另一個Tab時,Blur有可能比Focus后寫入存儲中,因此修改Focus狀態時需要異步處理。 實現以上狀態共享后,新的消息到達后,只需要查看本地存儲中’kxchat_focus_win_state’的值是否為blur,如果為blur才彈出窗口。
4. 通知窗口的事件響應
通知窗口支持onclick等事件響應,而響應函數中的作用范圍屬于創建該窗口的頁面。如下代碼: 在onclick的響應函數中訪問的window對象即屬于當前創建頁面,因此可以很方便的與當前頁面進行交互。以上代碼便實現了點擊彈出窗口會跳轉到對應的瀏覽器窗口和打開IM窗口。
新聞熱點
疑難解答
圖片精選