HTML5 localStorage对象是孤立的每个页面/域?我想知道,因为我如何命名localStorage键。我需要一个单独的字冠吗?或者我想怎么叫就怎么叫?
当前回答
正如其他人所指出的,localStorage对于每个协议、主机和端口都是唯一的。如果您想用前缀键来方便地控制存储,我建议使用localDataStorage。
它不仅有助于通过前缀键在同一域中强制分段共享存储,它还透明地存储javascript数据类型(数组,布尔值,日期,浮点数,整数,字符串和对象),提供轻量级数据混淆,自动压缩字符串,并方便按键(名称)查询以及按(键)值查询。
[免责声明]我是本实用程序的作者[/免责声明]
例子:
// instantiate our first storage object
// internally, all keys will use the specified prefix, i.e. passphrase.life
var localData = localDataStorage( 'passphrase.life' );
localData.set( 'key1', 'Belgian' )
localData.set( 'key2', 1200.0047 )
localData.set( 'key3', true )
localData.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } )
localData.set( 'key5', null )
localData.get( 'key1' ) --> 'Belgian'
localData.get( 'key2' ) --> 1200.0047
localData.get( 'key3' ) --> true
localData.get( 'key4' ) --> Object {RSK: Array(5)}
localData.get( 'key5' ) --> null
// instantiate our second storage object
// internally, all keys will use the specified prefix, i.e. prismcipher.com
var localData2 = localDataStorage( 'prismcipher.com' );
localData2.set( 'key1', 123456789 ) // integer
localData2.get( 'key1' ) --> 123456789
如您所见,基本值得到尊重,您可以创建几个实例来控制您的存储。
其他回答
如果你想让它每一页,我简单地用href位置作为键的前缀(为了更好地衡量,我去掉了冒号和斜杠):
let pageName = location.href.replaceAll('/','').replaceAll(':','');
sessionStorage[pageName + '_scrollTop'] = $(this).scrollTop();
取自完整版本的“恢复滚动位置”脚本:https://stackoverflow.com/a/75359943/4885073
它是每个域和端口的(与同源策略相同的隔离规则),要使它是每个页面的,就必须使用基于位置的键,或者其他一些方法。
你不需要前缀,如果需要的话就用一个。而且,是的,你可以给它们起任何你想要的名字。
是的,每个域/子域都有不同的localStorage,你可以调用任何你想要的键(前缀是不需要的)。
要获得一个键,可以使用方法key(index),例如
localStorage.key(0);
以前有一个名为globalStorage的对象,在那里你可以有多个localstorage,但它已经从规范中被弃用了
正如其他人所指出的,localStorage对于每个协议、主机和端口都是唯一的。如果您想用前缀键来方便地控制存储,我建议使用localDataStorage。
它不仅有助于通过前缀键在同一域中强制分段共享存储,它还透明地存储javascript数据类型(数组,布尔值,日期,浮点数,整数,字符串和对象),提供轻量级数据混淆,自动压缩字符串,并方便按键(名称)查询以及按(键)值查询。
[免责声明]我是本实用程序的作者[/免责声明]
例子:
// instantiate our first storage object
// internally, all keys will use the specified prefix, i.e. passphrase.life
var localData = localDataStorage( 'passphrase.life' );
localData.set( 'key1', 'Belgian' )
localData.set( 'key2', 1200.0047 )
localData.set( 'key3', true )
localData.set( 'key4', { 'RSK' : [1,'3',5,'7',9] } )
localData.set( 'key5', null )
localData.get( 'key1' ) --> 'Belgian'
localData.get( 'key2' ) --> 1200.0047
localData.get( 'key3' ) --> true
localData.get( 'key4' ) --> Object {RSK: Array(5)}
localData.get( 'key5' ) --> null
// instantiate our second storage object
// internally, all keys will use the specified prefix, i.e. prismcipher.com
var localData2 = localDataStorage( 'prismcipher.com' );
localData2.set( 'key1', 123456789 ) // integer
localData2.get( 'key1' ) --> 123456789
如您所见,基本值得到尊重,您可以创建几个实例来控制您的存储。
存储是按原点划分的,其中“原点”与同源策略(模式[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的存储。
推荐文章
- 我如何检查如果一个变量是JavaScript字符串?
- 如何检测如果多个键被按下一次使用JavaScript?
- 样式化HTML电子邮件的最佳实践
- 如何通过history. pushstate获得历史变化的通知?
- CSS/HTML:什么是使文本斜体的正确方法?
- 使用jQuery改变输入字段的类型
- 在JavaScript中,什么相当于Java的Thread.sleep() ?
- 我如何才能在表中应用边界?
- 如何使一个DIV不包装?
- 使用jQuery以像素为整数填充或边距值
- CSS div元素-如何显示水平滚动条只?
- 检查是否选择了jQuery选项,如果没有选择默认值
- Next.js React应用中没有定义Window
- 如何重置笑话模拟函数调用计数之前,每次测试
- 如何强制一个功能React组件渲染?