我有一个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中的页面来自我的本地服务器,或者由于其他原因。
谢谢您的建议!
Indexeddb不在iframe deu安全风险内运行。
您所谈论的异常意味着您正在尝试使用只读事务来添加,编辑或删除对象存储中的数据。如果要处理数据,请使用读写事务。
已知问题-第三方数据库不可见。
例如,如果在使用IndexedDB时使用iframe嵌入页面,则页面的IndexedDB数据将不可见。
请参见问题#943770:Issue 943770: DevTools: Show iframe IndexedDB databases
解决方法-一种选择是打开iframe页面直接并观察与该站点相关的indexeddb-而不是浏览iframe容器页面。