HTML5 localStorage对象是孤立的每个页面/域?我想知道,因为我如何命名localStorage键。我需要一个单独的字冠吗?或者我想怎么叫就怎么叫?
当前回答
是的,每个域/子域都有不同的localStorage,你可以调用任何你想要的键(前缀是不需要的)。
要获得一个键,可以使用方法key(index),例如
localStorage.key(0);
以前有一个名为globalStorage的对象,在那里你可以有多个localstorage,但它已经从规范中被弃用了
其他回答
它是每个域和端口的(与同源策略相同的隔离规则),要使它是每个页面的,就必须使用基于位置的键,或者其他一些方法。
你不需要前缀,如果需要的话就用一个。而且,是的,你可以给它们起任何你想要的名字。
是的,每个域/子域都有不同的localStorage,你可以调用任何你想要的键(前缀是不需要的)。
要获得一个键,可以使用方法key(index),例如
localStorage.key(0);
以前有一个名为globalStorage的对象,在那里你可以有多个localstorage,但它已经从规范中被弃用了
如果你想让它每一页,我简单地用href位置作为键的前缀(为了更好地衡量,我去掉了冒号和斜杠):
let pageName = location.href.replaceAll('/','').replaceAll(':','');
sessionStorage[pageName + '_scrollTop'] = $(this).scrollTop();
取自完整版本的“恢复滚动位置”脚本:https://stackoverflow.com/a/75359943/4885073
正如Nick建议的那样,它可以在域中的任何地方使用,作为替代方案,sessionStorage的工作方式略有不同,因为它与浏览器窗口本身不同。也就是说,同一域中的其他选项卡或窗口不能访问存储对象的同一副本。
存储是按原点划分的,其中“原点”与同源策略(模式[http vs. https等]、端口和主机的组合)相同。来自规范:
每个顶级浏览上下文都有一组唯一的会话存储区域,每个源对应一个。
因此,http://a.example.com和http://b.example.com的存储是分开的(它们都与http://example.com分开),因为它们都是不同的主机。类似地,http://example.com:80、http://example.com:8080和https://example.com都是不同的起源。
在网络存储中,没有一种机制允许一个源访问另一个源的存储。
注意,它是origin,而不是URL,因此http://example.com/page1和http://example.com/page2都可以访问http://example.com的存储。
推荐文章
- AngularJS:工厂和服务?
- js:将一个组件包装成另一个组件
- 我如何在网站上使用谷歌的Roboto字体?
- 父ng-repeat从子ng-repeat的访问索引
- 如何禁用文本区域大小调整?
- JSHint和jQuery: '$'没有定义
- 模仿JavaScript中的集合?
- 用JavaScript验证电话号码
- 如何在HTML5中改变视频的播放速度?
- 保留HTML字体大小时,iPhone的方向从纵向改变为横向
- 谷歌地图API v3:我可以setZoom后fitBounds?
- ES6/2015中的null安全属性访问(和条件赋值)
- 与push()相反;
- 嵌套行与自举网格系统?
- JS字符串“+”vs concat方法