在同一域的两个不同的离线Web应用程序中创建/访问indexedDB使用相同的数据库

时间:2015-10-09 21:59:30

标签: javascript html5 indexeddb offlineapps

我创建了两个不同的离线网络应用,每个都使用IndexedDB来存储视频。它们位于不同的URL但是相同的域。例如:

http://example.com/first-web-app
http://example.com/second-web-app

在两者中,我创建了一个名为“video_files”的数据库,并将视频存储为“video1”,“video2”等。代码首先检查数据库中是否存在视频,如果是,则加载它,否则写入在那里。

在浏览器中查看第一个Web应用程序后,在第二个Web应用程序中,它找到“video1”!它加载来自第一个网络应用程序的视频!

我的问题:

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

  2. 有解决方法吗?

  3. 这是否意味着离线网络应用的空间限制(例如iOS Safari上的50 MB)是域范围限制,而不是网络应用限制?

  4. CODE:

    //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 个答案:

答案 0 :(得分:3)

Web平台的信任/安全模型 - 包括存储API(Indexed DB,localStorage,Service Worker Cache等) - 基于 origin 。 Origin = scheme + host + port,因此https://example.comhttp://example.comhttp://example.com:4201http://sub.example.com是4个不同的来源。

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

浏览器如何分配配额取决于限制和分组。虽然http://sub.example.comhttp://example.com的来源不同,无法读取/写入彼此的数据,但用户代理可以使它们共享相同的配额。