亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > HTML > 正文

突襲HTML5之Javascript API擴展5―其他擴展(應用緩存/服務端消息/桌面通知)

2024-08-26 00:14:51
字體:
來源:轉載
供稿:網友
前面已經總結了主要的API擴展,下面幾個擴展只有在專用的場合才會發揮最大的作用,這里簡單了解一下。下面這些特性無一例外,IE均不支持。應用緩存和服務端消息在其他的主流瀏覽器中都是支持的。桌面通知目前只有Chrome支持。
應用緩存
很多時候,我們需要緩存一些不經常改變的頁面來提高訪問速度;而且對于某些應用,我們也希望在離線的情況下也可以使用。在HTML5中,你可以通過一個稱之為“應用緩存”的技術很方便的實現這些功能。
在應用緩存的實現中,HTML5允許我們創建一個緩存manifest文件來方便的生成一個離線版的應用。
實現步驟
1. 啟用頁面的緩存,很簡單,只需要在document的html中包含manifest屬性:

復制代碼 代碼如下:www.CuoXIn.com

<!DOCTYPE HTML>
<html manifest="demo.appcache">
...
</html>

每一個包含這個manifest屬性的頁面當用戶訪問的時候都會被緩存。如果manifest屬性沒有指定的話,將不會緩存(除非網頁被直接在manifest文件中指定)。manifest文件擴展名還沒有統一的標準,推薦的擴展名是".appcache"。
2. 服務器端配置manifest文件的MIME類型
一個manifest文件需要被正確的MIME-type支持,這種文件類型為"text/cache-manifest"。必須在所使用的web服務器上進行配置。例如:Apache 中可在 .htaccess 中添加: AddType text/cache-manifest manifest。
3.編寫manifest文件
manifest文件是一個簡單的文本文件,告訴了瀏覽器去緩存什么內容(或者不緩存什么內容)。
manifest文件包含下面三個部分:
• CACHE MANIFEST - 在這個列表標題下的文件將會在下載后被緩存。
• NETWORK - 在這個列表標題下的文件將要求連接到服務器,不會進行緩存。
• FALLBACK - 在這個列表標題下的文件如果不能訪問時,則顯示特定的頁面。
完整的一個文件如下面的例子所示:

復制代碼 代碼如下:www.CuoXIn.com

CACHE MANIFEST
# 2012-02-21 v1.0.0
/theme.css
/logo.gif
/main.js
NETWORK:
login.asp
FALLBACK:
/html5/ /offline.html

提示:
#開頭的代表注釋。
*可以用表示所有的其它資源或者文件。例如:

復制代碼 代碼如下:www.CuoXIn.com

NETWORK:
*

表示所有的資源或者文件都不會緩存。
4.更新緩存
一旦一個應用被緩存,它將保持緩存除非一下情況發生:
• 用戶刪除了緩存
• manifest文件被修改
• 應用緩存被程序修改
所以一旦文件被緩存,除了人為的修改情況,瀏覽器將會持續的顯示緩存版本內容,即使你修改了服務器文件。為了讓瀏覽器更新緩存,你只能去修改manifest文件。
:以"#"開始的行是注釋行,但是可以有其它用處。如果你的修改只涉及到一個圖片或者javascript功能,那些變化是不會被重新緩存的。在注釋中更新日期和版本是讓瀏覽器重新緩存你的文件的一個方法
:瀏覽器可以有很多不同大小限制的緩存數據(有些瀏覽器允許5M的緩存數據)。

復制代碼 代碼如下:www.CuoXIn.com

<strong>服務端消息</strong>
還有一個經常使用的場景是:當服務端的數據發生變化時,如何讓客戶端知道?這在以前的做法是:頁面主動去查詢服務端是否有更新。根據前面的介紹,我們知道,使用WebSocket可以實現雙向通訊。這里再介紹另外一個HTML5中新特性:服務端消息(Server-Sent Events)。
在HTML5中,承載這項特性的對象是EventSource對象。
使用步驟如下:
1.檢查瀏覽器對EventSource對象的支持性,這個大家都知道了:


復制代碼 代碼如下:www.CuoXIn.com

if(typeof(EventSource)!=="undefined")
{
// Yes! Server-sent events support!
// Some code.....
}else {
// Sorry! No server-sent events support..
}

2.服務器端的發送消息代碼
服務器端的發送更新消息很簡單:設置content-type頭信息為”text/event-stream"后,你就可以發送事件。以ASP代碼為例:

復制代碼 代碼如下:www.CuoXIn.com

<%
Response.ContentType="text/event-stream"
Response.Expires=-1
Response.Write("data: >> 服務器時間" & now())
Response.Flush()
%>

3.瀏覽器端的接收消息代碼

復制代碼 代碼如下:www.CuoXIn.com

var source=new EventSource("demo_sse.php");
source.onmessage=function(event){
document.getElementById("result").innerHTML+=event.data + "
";
};

代碼說明:
• 創建一個EventSource對象,指定發送更新的頁面URL (這里是demo_see.jsp)
• 每一次一個更新接收后,onmessage事件就觸發
• 當onmessage時間觸發,將得到的數據設置到id="result"的元素中
EventSource對象除了onmessage事件外,還有處理錯誤的onerror事件,連接建立的onopen事件等。
桌面通知 - 準HTML5特性
桌面通知功能能夠讓瀏覽器即使是最小化狀態也能將消息通知給用戶。這和WebIM是最為天然的結合。不過,目前支持該特性的瀏覽器只有Chrome。彈窗是大家深惡痛絕的東西,所以開啟這項特性需要得到用戶的許可。

復制代碼 代碼如下:www.CuoXIn.com

<script>
function RequestPermission(callback) {
window.webkitNotifications.requestPermission(callback);
}
function showNotification() {
//通過window.webkitNotifications判斷瀏覽器是否支持notification
if (!!window.webkitNotifications) {
if (window.webkitNotifications.checkPermission() > 0) {
RequestPermission(showNotification);
} else {
var notification =window.webkitNotifications.createNotification("[imgurl]","Title","Body");
notification.ondisplay = function() {
setTimeout('notification.cancel()', 5000);
}
notification.show();
}
}
}
</script>

瀏覽器中打開此頁面,就會看到桌面的右下角彈出一個持續5秒鐘的消息窗口。
這項特性使用起來很簡單,但是在實際操作的過程中,應該盡量減少通知功能對用戶的干擾,最大程度的減少通知功能的出現。
下面是網上高手做這個應用的一些經驗
1. 收到多條消息時確保只出現一條通知;
這個問題比較好解決,因為通知對象擁有一個名為"replaceId"的屬性。指定該屬性后,只要是相同replaceId的通知窗口彈出,都會覆蓋之前彈出的窗口。在實際項目中是給所有的彈出窗口賦了一個相同的replaceId。不過需要注意的是,這種覆蓋行為只在同域下有效。
2. 當用戶處于IM出現的頁面中時(頁面處于Focus狀態)將不出現通知;
這個問題主要是在于判斷瀏覽器窗口是否處于Focus狀態,目前除了監聽window的onfocus和onblur事件之外,貌似沒有更好的方式。在項目中就是通過這種方式來記錄窗口的Focus狀態,然后當消息到達時根據Focus狀態來判斷是否彈出窗口。

復制代碼 代碼如下:www.CuoXIn.com

$(window).bind( 'blur', this.windowBlur).bind( 'focus', this.windowFocus);

使用該方法需要注意的地方是,事件注冊的事件點應該盡可能的靠前,如果注冊太晚則當用戶打開頁面后再離開就會很容易出現狀態的誤判。
3. 當用戶使用多Tab開啟多個存在IM的頁面時,只要有一個頁面處于Focus狀態將不出現通知;
多頁面間的狀態共享可以通過本地存儲來實現:
• 瀏覽器窗口Focus時修改本地存儲中指定key的值為"focus"
• 瀏覽器窗口Blur時修改本地存儲中指定key的值為"blur"。
需要注意的是,Chrome下從一個Tab切換到另一個Tab時,Blur有可能比Focus后寫入存儲中,因此修改Focus狀態時需要異步處理。

復制代碼 代碼如下:www.CuoXIn.com

/*window on focus事件*/
//用延時是為了解決多個Tab之間切換時,始終讓Focus覆蓋其他Tab的Blur事件
//注: 如果在點擊Tab之前沒有Focus到document上則點擊Tab是不會觸發Focus的
setTimeout( function(){
Storage.setItem( 'kxchat_focus_win_state', 'focus' );
}, 100);
/*window on blur事件*/
Storage.setItem( 'kxchat_focus_win_state', 'blur' );

實現以上狀態共享后,新的消息到達后,只需要查看本地存儲中’kxchat_focus_win_state’的值是否為blur,如果為blur才彈出窗口。
4. 如何讓用戶點擊通知浮動層即可定位到具體的聊天窗口
通知窗口支持onclick等事件響應,而響應函數中的作用范圍屬于創建該窗口的頁面。如下代碼:

復制代碼 代碼如下:www.CuoXIn.com

var n = dn.createNotification(
img,
title,
content
);
//確保只有一個提醒
n.replaceId = this.replaceId;
n.onclick = function(){
//激活彈出該通知窗口的瀏覽器窗口
window.focus();
//打開IM窗口
WM.openWinByID( data );
//關閉通知窗口
n.cancel();
};

在onclick的響應函數中訪問的window對象即屬于當前創建頁面,因此可以很方便的與當前頁面進行交互。以上代碼便實現了點擊彈出窗口會跳轉到對應的瀏覽器窗口和打開IM窗口。
:頁面中的相關事件很多時候具有不確定的時序性,所以我們的代碼盡量不要假設某些事件觸發的順序是一定的。比如上面的blur和focus事件

實用參考:
官方文檔:http://www.w3schools.com/html5/
html5的一個中文教程:http://www.gbin1.com/tutorials/html5-tutorial/


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲在线播放| 综合av色偷偷网| 国产精品久久久久久久久久久新郎| 亚洲成人在线视频播放| 庆余年2免费日韩剧观看大牛| 国产日韩欧美黄色| 欧美成人一区二区三区电影| 亚洲精选中文字幕| 国产视频精品免费播放| 日韩精品视频中文在线观看| 久久久欧美一区二区| 不卡中文字幕av| 亚洲www永久成人夜色| 国产精品18久久久久久麻辣| 国产欧美va欧美va香蕉在线| 久久手机精品视频| 国产一区二区三区丝袜| 国产精品美女无圣光视频| 久久免费国产视频| 国产欧美精品日韩精品| 久久成人精品电影| 欧美日韩视频在线| 国产精品一久久香蕉国产线看观看| 欧美成年人视频网站欧美| 久久久国产91| 日韩激情视频在线播放| 国产精品自产拍高潮在线观看| 亚洲理论片在线观看| 国产精品女人久久久久久| 亚洲人成电影在线播放| 欧美在线www| 中文字幕av日韩| 久久精品国产免费观看| 国产精品久久久久久久久久尿| 欧美色欧美亚洲高清在线视频| 最新的欧美黄色| 最近2019中文字幕mv免费看| 国产精品影院在线观看| 成人激情视频在线播放| 日韩精品中文字幕视频在线| 久久久精品亚洲| 国产精品久久久久久婷婷天堂| 精品久久久久久电影| 91精品国产高清久久久久久久久| 一区二区在线视频| 8090成年在线看片午夜| 精品久久久香蕉免费精品视频| 欧美日韩一区二区精品| 国产成人精品久久久| 91精品啪aⅴ在线观看国产| 欧美成人午夜免费视在线看片| 91国内在线视频| 亚洲自拍偷拍第一页| 国产综合久久久久久| 国产精品爽爽ⅴa在线观看| 亚洲欧美日韩国产精品| 狠狠久久五月精品中文字幕| 亚洲欧美日本精品| 日韩在线观看免费全集电视剧网站| 色一情一乱一区二区| 欧美高清视频一区二区| 亚洲影视中文字幕| 日韩人在线观看| 91精品久久久久久久久不口人| 欧美福利视频在线| 国产精品极品美女在线观看免费| 亚州av一区二区| 久热精品视频在线观看一区| 久久久国产成人精品| 在线国产精品视频| 中文字幕亚洲色图| 日韩av电影在线播放| 91在线免费视频| 成人97在线观看视频| 久久91亚洲精品中文字幕奶水| 国产一区二区黄| 欧洲一区二区视频| 日韩性生活视频| 成人情趣片在线观看免费| 国产精品久久一区主播| 亚洲综合最新在线| 亚洲第一福利网站| 欧美黑人极品猛少妇色xxxxx| 97av在线播放| 日韩精品中文字幕在线播放| www.亚洲天堂| 日韩av中文字幕在线| 日韩欧美综合在线视频| 青青草一区二区| 亚洲精品www| 国产精品久久视频| 深夜福利日韩在线看| 久久精品这里热有精品| 日韩精品久久久久久福利| 欧美激情亚洲国产| 亚洲男人的天堂在线播放| 欧美性开放视频| 日韩欧美在线视频观看| 亚洲www在线观看| www.亚洲一二| 日韩女在线观看| 中国日韩欧美久久久久久久久| 国产九九精品视频| 欧美第一黄色网| 97久久精品人人澡人人爽缅北| 日韩中文字幕国产精品| 亚洲美女激情视频| 久久成人免费视频| 亚洲色图av在线| 精品呦交小u女在线| 日韩在线视频线视频免费网站| 国产婷婷色综合av蜜臀av| 国产精品∨欧美精品v日韩精品| 亚洲精品视频中文字幕| 亚洲综合国产精品| 欧美日韩在线视频首页| 国产精品久久久久久久久影视| 国产激情久久久| 亚洲精品自拍视频| 欧美性生交xxxxxdddd| 丁香五六月婷婷久久激情| 欧美日韩视频免费播放| 国产精品一区二区久久久| 日韩中文字幕在线视频播放| 国产91免费看片| 97成人精品区在线播放| 亚洲成人黄色在线| 91久久久久久久一区二区| 欧美另类极品videosbestfree| 欧美日韩激情美女| 国产日韩在线一区| 国产视频福利一区| 欧美激情a在线| 九九精品视频在线观看| 91精品在线一区| 亚洲国产小视频在线观看| 精品偷拍一区二区三区在线看| 国产精品欧美风情| 午夜精品三级视频福利| 亚洲国产成人av在线| 在线播放精品一区二区三区| 国产精品美乳一区二区免费| 亚洲毛片在线观看.| 亚洲男人的天堂在线| 日韩大片免费观看视频播放| 国产精品永久在线| 亚洲国产成人爱av在线播放| 亚洲人成伊人成综合网久久久| 久久国产精品久久久久久久久久| 色www亚洲国产张柏芝| 国产丝袜一区二区三区| 国产精品久久久久久久久久东京| 91久久久久久久一区二区| 日韩精品视频在线观看免费| 国产精品久久久久久久app| 欧美日韩激情网| 久久精品成人欧美大片古装| 国产精品三级美女白浆呻吟| 亚洲三级av在线| 亚洲日本成人女熟在线观看| 亚洲免费av网址| 国产精品一区二区三区在线播放| 久久精品亚洲一区| 日韩激情片免费|