`
yiminghe
  • 浏览: 1460166 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用离线存储

阅读更多

    离线存储 做为 html5 的一个特性在现代标准浏览器下已经被广泛实现,特别是 ie8 中也得以实现,但是对于目前仍然流行的ie6,7来说则需要一些额外的兼容性处理。

目前的各种数据存储方式:

1。cookie

 

cookie 可通过 domain= 设置 domain (必须为当前页面 hostname 的后缀《点分割》),默认为当前页面的 hostname。浏览器提交时通过当前页面的 hostname 和 cookie 的 domain 作比较,如果某个cookie 的 domain 是当前页面 hostname 的后缀则发送给服务器。

 

refer: HTTP Cookie Explained


优点:

所有浏览器一致兼容

缺点:

不严格的离线存储,每次和服务器交互这些信息都会来回传递,浪费带宽。
每个域只能存储4kb,实际上是送到服务器的大小,多余截断但是仍然可以用脚本访问。

个数限制,根据浏览器不同大概 20-50 个。

数据必须为字符串格式


2.flash sharedObject

flash 插件作为数据存取空间 ,对于win7,文件实体化于:
c:\Users\用户名\AppData\Roaming\Macromedia\Flash Player\#SharedObjects\随机串\
默认每个域下100KB的存储空间 ( refer:YUI2 SWFStore ),用户也可以这里 设置。
经过用户许可,设置可获得无限的使用空间

 

updated 2011-04-28:

 

flash  域 和 cookie 域不同,cookie 域指的是页面所在 domain,而 flash 域则为该 flash 文件所在的页面的 hostname,flash 所在文件服务器可通过 crossdomain.xml 来允许哪些页面 hostname 可以操纵 flash 对象的存储数据,因此可实现cookie 不能的跨域共享数据。需要注意的是同个 hostname 下的多个 flash 实际上是共享默认 100K 的限制,而不是以文件为单元限额。

 

refer : sharedobject 介绍

优点:

所有浏览器一致兼容,
不会产生网络流量,
不受用户清空浏览器缓存影响,
不同浏览器间也可以共享数据。
通过设置可以不受域访问约束。

数据可以是 javascript 简单格式,例如数组,对象,字符串

理论上经过用户允许可获得无限的存储空间,例如 yui swfstore 当存储空间不足时,会触发 pending 事件,这时我们可以把改 flash 显示在页面中央。用户点击了允许后,则会存储空间扩容(4级 100k -> 1M -> 10M -> unlimited):

 

store.on("pending", function() {
            o.set("width", 215);
            o.center();
            o.show();
            // 轮训,直到用户允许
            setTimeout(function() {
                store.retrySave();
            }, 1000);
        });
 



缺点:

依赖于外部插件(flash)的安装


3.userData

每个应用可以产生上限64kb的单个xml数据文件,单个域可存储上限640k,对于xp,xml实体化于:

C:\Documents and Settings\用户名\UserData


优点:

不需要插件且不和服务器产生网络交互。


缺点:

ie 6,7 浏览器私有特性。
存储数据访问域控制过于严格,只能同样页面访问先前存储的数据。
存在由于内网安全设置导致的访问出错(属性未定义)。

4.localStorage

标准的本地存储解决方案,无限量的存储空间(ie8规定为单个 hostname 上限10MB),同一域内所有页面可互相访问。

以及更复杂完善,支持事务的数据库存储方案

 

updated 2010-11-10

 

ie8 的 localStorage 只能在 http 协议下使用,在 file 协议下(本地文件中):typeof localStorage 为 undefined

 

updated 2011-04-28


localStorage 的作用域限定于 html5 origin定义 ,即三元组:(scheme, host, port)。同一域名下的所有网页都共享同样的数据,这时就要注意命名冲突了。



优点:

 

适用当前以及未来的所有的标准浏览器


缺点:

 

目前流行的浏览器不能支持。


数据需要序列化为字符串,
否则会被自动 toString。这里还需要注意的是:ie (8,9) 性能并不好,大数据量序列化会造成假死现象,推荐还是使用 flash 解决方案:可以存储 plain javascript 格式,不需要序列化。

 

容量有限,虽然规范没有明确规定,但目前 支持的浏览器都是限额 5M ,而且不像 flash 解决方案一样可以经过程序申请而扩容,超过 5M ,则会抛出 QUOTA_EXCEEDED_ERR error !


兼容:

   从上可见,flash具备最多的优点(基本上完全覆盖localStorage),而localStorage 则具备光明的前景,甚至可以采用具备完善事务支持的webdatabase,persistJS 综合考虑提供了完全的解决方案,可方便的在上述4种方法中进行切换,但是过于复杂,可能现实中根本用不到。

 

    目前的最佳实践我认为则是通过 flash 来模拟不支持localstorage浏览器的本地存储:即创建flash为底层的localStorage ,对于连 flash 都不安装的 ie6,7用户就没有考虑的必要了。

 

 

Flash in ie note :

 

当 ie 下flash被缓存时,再次访问,flash 的 ready 事件会在 flash 添加到 dom 的瞬间同步触发,若利用桥接模式使用 javascript 对象封装flash ,则要注意修正,否则

 

1.ie 缓存状态下事件会在注册之前就触发了。(同步触发)

2.swf 刚 ready,在其事件处理函数中调用 swf其本身 的 External Interface 方法会

flash 内部出错。

 

比较好的方法则是,手动强制异步flash的事件触发:

 

FlashBridge.EventHandler = function(id, event) {
        var instance = instances[id];
        if (instance) {
            //防止ie同步触发事件,后面还没on呢,另外给 swf 喘息机会
            //否则同步后触发事件,立即调用swf方法会出错
            setTimeout(function() {
                instance._eventHandler.call(instance, event);
            }, 100);
        }
    };
 


2010-09-25 update:

 

发现最新升级 firefox 下的 flash 插件似乎不鼓励单纯使用不可见 flash 做为后台数据支撑,当

1.flash设置为width,height=0

2.或其外围容器的宽高为0

3.或其外围容器定位到了视窗以外

都将导致flash不会触发ready事件,所以只能做到将外围容器设置宽高为1,overflow:hidden,定位到视窗内:

 

"<div style='width:1px;" +
                            "height:1px;" +
                            "position:absolute;" +
                            //必须使创建的flash视窗内可见,才会触发contentReady
                            "left:" + DOM.scrollLeft() + "px;" +
                            "top:" + DOM.scrollTop() + "px;"
                            + "overflow:hidden;'><object width='原宽度' ...>....</object></div>"
 

 

 

 

  • 大小: 15.1 KB
分享到:
评论

相关推荐

    html5离线存储课程代码

    HTML5离线存储是Web应用程序实现离线工作的关键技术,它允许网页在用户离线时仍然可以访问和使用部分数据,极大地提升了用户体验。本课程代码主要围绕这个主题展开,旨在帮助开发者掌握HTML5离线存储的基本原理和...

    HTML5_离线存储技术

    **四、离线存储的使用场景** 开发离线Web应用时,主要关注以下三个方面: 1. **资源缓存**:通过manifest文件,开发者可以控制哪些文件在用户在线时被缓存,以便离线时使用。 2. **在线状态检测**:HTML5提供了`...

    HTML5离线存储

    我通过Application Cache+localStorage+web sql构建了一个离线应用,同时我也把逻辑按照Application cache+localStorage+indexedDB写了一次,有兴趣的同学可以下载,同时代码...可以让大家很快理解HTML5离线存储技术

    html5离线存储

    ### HTML5离线存储技术详解 #### 一、HTML5离线存储概述 HTML5作为新一代的HTML标准,标志着Web领域的重要发展。其中一项重要的新特性便是对离线应用的支持,使得Web应用即使在网络不可用的情况下也能保持可用性。...

    html5离线存储实例

    首先,我们来看看Application Cache,也被称为离线存储。这是一种基于文件的缓存机制,允许开发者指定一组资源(如HTML、CSS、JavaScript、图片等)进行离线存储。通过在HTML文件的`&lt;head&gt;`部分添加`&lt;manifest&gt;`标签...

    C# Winform开发使用离线地图 GMap 例程

    离线地图数据通常以瓦片形式存储,每个瓦片代表地图的一个小部分。你可以从OpenStreetMap或其他地图数据源下载这些瓦片,并按照特定的目录结构组织。GMap.NET支持多种瓦片格式,例如`.png`或`.jpg`。你需要确保瓦片...

    离线地图的实现

    离线地图的实现是针对那些在无网络或者网络不稳定环境下仍需使用地图服务的应用场景而设计的解决方案。这种技术的核心是将在线地图服务中的大量地理信息数据预先分割、存储,并在本地进行访问,以实现地图的浏览和...

    数据库数据离线存储

    数据库数据离线存储是Web应用程序实现离线工作模式的关键技术之一,它允许用户在没有网络连接的情况下也能访问和操作数据。HTML5引入的Web Storage API提供了两种方式来存储数据:Local Storage和IndexedDB,其中后...

    腾讯X5内核离线使用Demo

    2. 离线存储技术:熟悉AppCache和Service Worker的工作原理,以及如何创建和维护离线缓存。 3. 资源加载策略:学习如何设计和优化资源加载流程,确保离线环境下的性能和用户体验。 4. 错误处理和状态检测:理解如何...

    html5离线存储.pdf

    离线存储主要依赖于以下几个核心概念和技术: 1. 离线资源缓存:HTML5通过`cache manifest`文件实现资源的离线缓存。开发者需要创建一个manifest文件,列出应用在离线模式下所需的静态资源(如HTML、CSS、...

    离线数据存储和上传方案

    离线存储是指在没有网络连接的情况下,将数据保存在本地设备或外部存储介质上。这种方式适用于网络不可靠或成本高昂的环境,例如远程传感器节点或移动设备。在这些情况下,数据需要在本地进行缓存和管理,直到能够...

    离线存储,改进。使用简单但功能强大的API封装IndexedDB、WebSQL或localStorage.zip

    为了简化这些离线存储技术的使用,开发者通常会创建一个统一的API封装。这个压缩包中的"离线存储,改进。使用简单但功能强大的API封装IndexedDB、WebSQL或localStorage"很可能就是一个这样的工具。它可能通过一个...

    html5离线存储.docx

    HTML5 离线存储是该技术标准的一个关键特性,旨在增强Web应用程序的离线可用性,使得用户在没有互联网连接的情况下也能访问和使用部分Web应用。这一特性主要依赖于三个方面:离线资源缓存、在线状态检测以及本地数据...

    JavaScript_离线存储使用简单但功能强大的API改进了Wraps IndexedDB WebSQL或localStor

    本篇文章将详细探讨JavaScript离线存储的使用,特别是如何通过简单而功能强大的API——localForage来改进传统的IndexedDB、WebSQL或localStorage。 1. **离线存储的重要性** 在移动设备和Web应用日益普及的今天,...

    天地图-离线地图使用的js和css

    "天地图-离线地图使用的js和css"这个主题涉及到的是如何在内网环境中使用天地图服务,通过修改过的源码实现离线访问。天地图是中国的一个权威地理信息系统,提供了丰富的地图数据服务,包括基础地图、卫星图像、地形...

    使用openlayers加载离线地图实例

    4. **加载离线地图瓦片**:离线地图通常以瓦片形式存储,可以通过创建TileLayer并指定瓦片源来加载。例如,如果瓦片位于本地文件夹,可以使用XYZ源: ```javascript var tileLayer = new ol.layer.Tile({ source:...

    Google离线地图,通过demo.html可以直接打开

    不过,请注意,Google的使用条款可能限制了离线地图的使用,因此在实际应用前,务必查阅并遵守相关条款。此外,为了提供更好的用户体验,你还可以考虑添加更多高级特性,如离线搜索、路线规划等。

    echarts省市区离线地图

    3. `jquery.js` 是一个广泛使用的JavaScript库,可能在这个案例中用于辅助DOM操作和事件处理。 4. `city.js` 文件可能包含了更细致的城市级别地理信息,可以扩展到更详细的地图展示。 六、实际应用 在实际应用中,...

    ArcGIS For JavaScript4.8离线API

    - **离线数据管理**:使用离线存储技术,如IndexedDB,保存和加载地图数据。 - **自定义样式**:利用CSS和SVG定制地图符号和标签,增强视觉效果。 **5. 性能优化** - **懒加载**:只在需要时加载图层和数据,减少...

Global site tag (gtag.js) - Google Analytics