【问题标题】:Creating/accessing indexedDB in two different offline web apps of same domain uses the same database在同一域的两个不同离线 Web 应用程序中创建/访问 indexedDB 使用相同的数据库
【发布时间】: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”!它会从第一个网络应用加载视频!

我的问题:

  1. 这是 IndexedDB 的正确规范吗?每个域一个?

  2. 有没有办法解决这个问题?

  3. 这是否意味着离线 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


【解决方案1】:

Web 平台的信任/安全模型 - 包括存储 API(索引 DB、localStorage、Service Worker 缓存等) - 基于origin。来源=方案+主机+端口,所以https://example.comhttp://example.comhttp://example.com:4201http://sub.example.com是4个不同的来源。

如果您希望您的部分来源(例如页面)使用不同的存储,您必须自己对其进行分区,例如page1 使用前缀为“page1-”等的数据库。请注意,作为同一来源的一部分,这些页面将隐含访问来源中的其他数据。

浏览器如何分配配额取决于浏览器,包括限制和分桶。尽管http://sub.example.comhttp://example.com 是不同的来源并且不能读取/写入彼此的数据,但用户代理可以让它们共享相同的配额。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-28
    • 1970-01-01
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    相关资源
    最近更新 更多