目前我正在尝试使用localStorage存储大量相同类型的对象,我感到有些困惑.
一种思维方式是将所有对象存储在数组中.但是对于单个对象的每次读/写,我需要对整个数组进行反序列化/序列化.
另一种方法是将每个对象的密钥直接存储在localStorage中.这将使访问每个对象变得更容易,但我担心将存储的对象数量(数万).此外,获取所有对象将需要迭代整个localStorage!
我想知道哪种方式会更好?是否值得尝试更复杂的客户端数据库,如PouchDB?
我编写了一个在浏览器 (FireFox) 选项卡中运行的GreaseMonkey (javascript) 用户脚本www.site1.com/stuff。另一个选项卡指向www.site1.com(没有stuff),并且不是第一个的子窗口(例如,不是通过在第一个选项卡上运行的用户脚本打开的)。用户脚本(独立?)在两个选项卡上运行。
我希望第一个浏览器选项卡上的用户脚本执行将字符串变量传递给第二个浏览器选项卡。虽然GM_setValue并且GM_getValue在单个用户脚本中的存储/检索工作良好,但该存储区域似乎无法被用户脚本的其他执行访问。localStorage遭受同样的失败。对于一个明确的例子:
当用户脚本检测到它正在运行时www.site1.com/stuff,它会将一个值放入存储中: GM_setValue('parValue', 'aaabbbccc');
在第一个选项卡完全加载并有足够的时间将此值放入存储后,将手动打开第二个选项卡。当用户脚本检测到第二个选项卡正在运行www.site1.com(没有stuff)时,代码会尝试检索值: var parVal = GM_getValue('parValue')。在我的用户脚本中,parVal 会有一个null值;每个用户脚本执行似乎使用不同的存储区域。
我如何实现这个看似简单的任务,即在以下约束下从公共存储区域安全/检索同一用户脚本的两个执行:
* 第stuff一个选项卡的 URL 末尾可以由用户随意更改(为每种可能的stuff可能性编写单独的用户脚本是不可能的)。
* 标签永远不会有父/子关系,因为它们是独立生成的(从技术上讲,第二个标签是第一个标签的孙子,但我不知道这两个标签的窗口名称是什么或如何引用它们在代码中)。
* 使用在GreaseMonkey 用户脚本中运行的 javascript
是否有某种可以使用的全局交叉表存储区域,可以在GreaseMonkey 用户脚本中实现?理论上应该GM_setValue适用于这种情况吗?我花了大量时间研究以下相关 SO 问题的答案,但无法找到适用于上述条件集和/或可以实现到GreaseMonkey 用户脚本的解决方案:选项卡或窗口之间的通信,Javascript :在选项卡之间共享数据,https : //superuser.com/questions/1005448/can-a-greasemonkey-script-know-whats-been-loaded-into-another-tab ,使用向所有打开的窗口/选项卡发送消息JavaScript的,