Javascript 在同一域的两个不同脱机web应用中创建/访问indexedDB使用相同的数据库

Javascript 在同一域的两个不同脱机web应用中创建/访问indexedDB使用相同的数据库,javascript,html,indexeddb,offlineapps,Javascript,Html,Indexeddb,Offlineapps,我创建了两个不同的离线web应用程序,每个应用程序都使用IndexedDB存储视频。它们位于不同的URL,但属于同一个域。例如: http://example.com/first-web-app http://example.com/second-web-app 在这两种情况下,我都创建了一个名为“video_files”的数据库,并将视频存储为“video1”、“video2”等。代码首先检查视频是否存在于数据库中,如果存在,则将其加载,否则将其写入数据库中 在浏览器中查看第一个web应用后

我创建了两个不同的离线web应用程序,每个应用程序都使用IndexedDB存储视频。它们位于不同的URL,但属于同一个域。例如:

http://example.com/first-web-app
http://example.com/second-web-app
在这两种情况下,我都创建了一个名为“video_files”的数据库,并将视频存储为“video1”、“video2”等。代码首先检查视频是否存在于数据库中,如果存在,则将其加载,否则将其写入数据库中

在浏览器中查看第一个web应用后,在第二个web应用中,它会找到“video1”!它从第一个web应用程序加载视频

我的问题是:

  • 这是IndexedDB的正确规格吗?每个域一个

  • 有办法解决这个问题吗

  • 这是否意味着对离线web应用的空间限制(例如,iOS Safari上的50 MB)是一个域范围的限制,而不是web应用的限制

  • 代码:


    编辑:目前还不清楚IndexedDB中的iOS存储是否有限制至少我使用了这段代码:并且在我停止尝试之前能够存储198MB

    Web平台的信任/安全模型-包括存储API(索引数据库、本地存储、服务工作者缓存等)-是基于源代码的。原点=方案+主机+端口,因此,和是4个不同的原点

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


    浏览器如何分配配额取决于浏览器,无论是在限制方面还是在扣件方面。虽然和的来源不同,无法读取/写入彼此的数据,但用户代理可以让它们共享相同的配额。

    1。对2.每个应用程序使用不同的数据库名称,可能是location.href的第一个路径段。3.是的,每个域50mb。@dandavis您确定3吗?这是一个巨大的限制问题!是的,就像本地存储一样,indexDB不关心页面,只关心域。DBs不是为保存视频而设计的。。。你可以滥用子域来获得更多的空间…@dandavis我理解,但是大小限制不是IndexedDB限制-它是由各种浏览器应用的整个web应用程序限制(每个浏览器都有不同的限制)。那么你确定一个域名的总容量是50MB吗?对不起-不,我没有看到关于它的真正文档。雷蒙德·卡姆登(Raymond Camden)在博客上发表了一篇关于桌面索引DB限制的文章,他基本上通过最大化来测试它们。他的发现在:-Safari的索引数据库实现在他做的时候被破坏了,所以他没有测试它。您可以使用他在帖子中提供的带有脚本的网页在Safari上进行测试。
    //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" );