1

我有一个 IndexedDB 数据库,其中 html 文档作为 blob 存储在内部,还有一个 webapp 使用 iframe 来可视化这些文档。

我的问题是:每次单击 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 中的页面来自我的本地服务器,或者因为其他原因。

感谢您的意见 !

4

2 回答 2

0

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

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

于 2013-07-19T18:24:42.930 回答
0

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

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

请参阅问题 #943770: 问题 943770:DevTools:显示 iframe IndexedDB 数据库

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

于 2020-03-11T03:59:46.117 回答