主窗口的IndexedDB数据库不同于iframe内容';是哪一个?

主窗口的IndexedDB数据库不同于iframe内容';是哪一个?,iframe,indexeddb,Iframe,Indexeddb,我有一个IndexedDB数据库,其中html文档以blob的形式存储在数据库中,还有一个使用iframe可视化这些文档的webapp 我的问题是:每次单击iframe中显示的html文档中的链接时,我都想获取数据库的存储,其中包含html文档,但是当我尝试时,它会抛出一个异常。当我不在iframe的“内部”(该函数位于eventListener绑定到iframe内部的超文本链接的内部)时,它可以毫无问题地获取它 使用的功能是: function getObjectStore(store_nam

我有一个IndexedDB数据库,其中html文档以blob的形式存储在数据库中,还有一个使用iframe可视化这些文档的webapp

我的问题是:每次单击iframe中显示的html文档中的链接时,我都想获取数据库的存储,其中包含html文档,但是当我尝试时,它会抛出一个异常。当我不在iframe的“内部”(该函数位于eventListener绑定到iframe内部的超文本链接的内部)时,它可以毫无问题地获取它

使用的功能是:

function getObjectStore(store_name, mode) {
  var tx = db.transaction(store_name, mode); // mode in this case is 'readonly'
  return tx.objectStore(store_name); // line where the exception is thrown when "inside the iframe"
}
其中db是我的数据库。引发的异常是:

例外。。。试图对不允许突变的数据库执行突变操作。代码:“11”nsresult:“0x80660006(InvalidStateError)”

因为在其他情况下一切正常,而且我在获取我的商店的步骤中没有发现任何问题,我想知道我是否有这个问题,因为我无法访问主窗口的数据库,即使主页和iframe中的页面来自我的本地服务器,或者因为其他原因


谢谢你的建议

Indexeddb不会在iframe deu安全风险中运行

您所说的异常意味着您正试图使用只读事务在对象存储中添加、编辑或删除数据。如果要操作数据,请使用读写事务

已知问题-第三方数据库不可见

例如,如果在使用IndexedDB时使用iframe嵌入页面,则页面的IndexedDB数据将不可见

见第943770期:


解决方法-一种选择是直接打开iframe页面并观察与站点相关的indexeddb,而不是通过iframe容器页面进行操作。

我认为这只是在使用其他域数据的情况下。。。那么,对于任何类型的数据,indexedDB都不会在iframe内部运行?如果我使用一个object元素而不是iframe,会不会因为安全风险而仍然存在阻塞?因为同源原则框架和iframe不会被单独使用,因为它们可以加载到其他域中。并非所有浏览器都能正确实现这一点。我相信使用Chrome是可能的消息建议您在只读事务中使用write op。您显示的代码对查看问题没有帮助。iframe应该可以。使用chrome开发工具调试iframe代码。我不明白的是,当我只请求objectStore时,为什么要使用编写操作?在调用函数中,我只执行
var store=getObjectStore(DB_store_NAME,'readonly')并且正是这一行引发了异常。所以我试着去理解问题是什么,但也许它只是因为安全风险而被屏蔽了,正如Kristof Degrave所说。我希望异常消息更适合上下文。我尝试了“readwrite”模式,但它没有改变任何内容,消息保持不变…我发现我的问题与iframe无关。这篇文章没用,我真正的问题是: