我创建了两个不同的离线网络应用,每个都使用IndexedDB来存储视频。它们位于不同的URL但是相同的域。例如:
http://example.com/first-web-app
http://example.com/second-web-app
在两者中,我创建了一个名为“video_files”的数据库,并将视频存储为“video1”,“video2”等。代码首先检查数据库中是否存在视频,如果是,则加载它,否则写入在那里。
在浏览器中查看第一个Web应用程序后,在第二个Web应用程序中,它找到“video1”!它加载来自第一个网络应用程序的视频!
我的问题:
这是IndexedDB的正确规范吗?每个域一个?
有解决方法吗?
这是否意味着离线网络应用的空间限制(例如iOS Safari上的50 MB)是域范围限制,而不是网络应用限制?
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 我只是停止尝试。
答案 0 :(得分:3)
Web平台的信任/安全模型 - 包括存储API(Indexed DB,localStorage,Service Worker Cache等) - 基于 origin 。 Origin = scheme + host + port,因此https://example.com,http://example.com,http://example.com:4201和http://sub.example.com是4个不同的来源。
如果您希望部分来源(例如网页)使用不同的存储空间,则必须自行对其进行分区,例如: page1使用前缀为“page1-”的数据库等。请注意,作为同一来源的一部分,这些页面将隐式访问原始内的其他数据。
浏览器如何分配配额取决于限制和分组。虽然http://sub.example.com和http://example.com的来源不同,无法读取/写入彼此的数据,但用户代理可以使它们共享相同的配额。