Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从具有相同域的多个iFrame进行IndexedDB访问_Javascript_Iframe_Indexeddb - Fatal编程技术网

Javascript 从具有相同域的多个iFrame进行IndexedDB访问

Javascript 从具有相同域的多个iFrame进行IndexedDB访问,javascript,iframe,indexeddb,Javascript,Iframe,Indexeddb,我在页面上有一些iFrame,其域与父级类似(因此,这里没有CORS问题,为什么我会有iFrame?说来话长,涉及Shindig Gadget Server等) 问题陈述:每个iFrame都有大量数据,需要在IndexedDB中本地存储(由于数据量巨大,无法使用local/sessionStorage),iFrame一经呈现,随后也会与这些数据交互 我想到的解决方案:每个iFrame都可以在IndexedDB中的单个DB实例中拥有不同的objectStore,框架可以与之交互(插入/更新/删除)

我在页面上有一些iFrame,其域与父级类似(因此,这里没有CORS问题,为什么我会有iFrame?说来话长,涉及Shindig Gadget Server等)

问题陈述:每个iFrame都有大量数据,需要在IndexedDB中本地存储(由于数据量巨大,无法使用local/sessionStorage),iFrame一经呈现,随后也会与这些数据交互

我想到的解决方案:每个iFrame都可以在IndexedDB中的单个DB实例中拥有不同的objectStore,框架可以与之交互(插入/更新/删除),而不会污染任何其他框架的数据。除了iFrame之外,父页面还需要保存一些数据,这些数据也将存储在IndexedDB中特定于父页面的其他objectStore中

要存储的数据类型:这是一个简单的键值对,其中第一列键是字符串(唯一键),值可以是简单的javascript对象、数组或JSON

问题:首先,我想知道这样的设计是否可行。我很怀疑,因为我写了一个带有2个iframe的简单程序。我正在打开3个到同一个DB的连接(frame_DB,见下图),每个iFrame中一个连接,父页面中一个连接,并尝试创建3个不同的ObjectStore(通过
OnUpgradeRequired
),但只创建了一个(带有父页面),而不是三个

我想知道我做错了什么,或者有没有更好的方法来实现这一点?或者甚至有可能做到这一点?我知道由于空间限制,我无法使用同步API,如localStorage/sessionStorage/Cookie

为了帮助理解,以下是我想要实现的目标:

数据库架构更改(如创建新对象存储)只能在“versionchange”事务运行时发生,只有在使用新版本打开时才会发生,而只有在没有其他数据库连接打开时才能继续

因此,只要一个框架连接到“frame_db”open,其他框架就无法创建新的存储

两种选择:

  • 改为每帧使用一个数据库
  • 对所有帧使用一个存储,并使用复合关键点。例如,代替ID为1、2、3的钥匙。。。使用以下形式的键:[“frame1”,1],“frame1,2]…[“frame2”,1],“frame2”,2]

后者将允许事务跨越多个帧的数据(这可能是您首先需要单个数据库的原因)“在IDB版本控制中,模式/版本更改对应于应用程序对数据库使用的更改。

谢谢,我实际上已经实现了第二个选项!