【发布时间】:2015-10-09 21:59:29
【问题描述】:
我创建了两个不同的离线网络应用程序,每个应用程序都使用 IndexedDB 来存储视频。它们位于不同的 url 但相同的域。例如:
http://example.com/first-web-app
http://example.com/second-web-app
在两者中,我创建了一个名为“video_files”的数据库并将视频存储为“video1”、“video2”等。代码首先检查视频是否存在于数据库中,如果存在则加载它,否则写入它在那里。
在浏览器中查看第一个网络应用程序后,在第二个网络应用程序中,它找到了“video1”!它会从第一个网络应用加载视频!
我的问题:
这是 IndexedDB 的正确规范吗?每个域一个?
有没有办法解决这个问题?
这是否意味着离线 Web 应用程序的空间限制(例如 iOS Safari 上的 50 MB)是域范围的限制,而不是 Web 应用程序的限制?
代码:
//This somehow returns the same database in both apps
var request = indexedDB.open( "video_files", 1.0 );
//This will load the same video in both apps
var transaction = Video.database.transaction( [ "videos" ], "readwrite" );
var request = transaction.objectStore( "videos" ).get( "video1" );
编辑:目前尚不清楚 IndexedDB for iOS 中的存储空间是否存在限制 我使用了以下代码:http://www.raymondcamden.com/2015/04/17/indexeddb-and-limits 并且能够存储 198MB 在我刚刚干脆停止尝试。
【问题讨论】:
-
1.是的。 2. 每个应用使用不同的数据库名称,可能是 location.href 的第一个路径段。 3. 是的,每个域 50mb。
-
@dandavis 你确定#3 吗?这是一个巨大的限制问题!
-
是的,就像 localStorage,indexDB 不关心页面,只关心域。数据库不是为保存视频而设计的……您可以滥用子域来获取更多空间……
-
@dandavis 我明白,但大小限制不是 IndexedDB 限制 - 它是各种浏览器应用的整个 Web 应用程序限制(并且每个浏览器都有不同的限制)。那么你确定一个域总共有 50MB 吗?
-
对不起 - 不,我没有看到任何真正的文档。 Raymond Camden 发表了一篇关于桌面索引数据库限制的博文,他基本上通过最大化来测试它们。他的发现位于:raymondcamden.com/2015/04/17/indexeddb-and-limits - Safari 的索引数据库实现在他这样做时被破坏了,所以他没有对此进行测试。您可以使用他发布的带有脚本的网页在 Safari 上对其进行测试。
标签: javascript html indexeddb offlineapps