我如何像 FT 网络应用程序一样请求增加 iPad 上的 HTML5 本地存储大小?

IT技术 javascript ios html mobile-website local-storage
2021-02-19 20:35:05

如果您打开http://app.ft.com(金融时报移动网络应用程序),系统会提示您将该应用程序添加到您的“家”。

执行此操作后,当您打开应用程序时,系统会再次提示您允许将 localstoreage 数据库大小增加到 50MB。

  • 如何才能做到这一点?是否有一些 JavaScript API 调用?权限还是什么?
  • 这个 iPad (iOS?) 是特定的,还是可以在其他 Webkit 浏览器上使用?
5个回答

我碰巧对此有所了解;)

没有用于请求增加现有数据库存储大小的 API。有一种强制增加的方法:将数据以需要增加的大小写入数据库,提示用户。但是,这会很慢,并且无法告诉当前分配的空间,因此不建议这样做。

Black Frog 有一部分是正确的:唯一巧妙的方法是在打开时请求一个非常大的数据库,例如:

openDatabase('databaseName', '1.0', 'My Database', 50*1024*1024, …

...请求 50MB 的空间。

但是,当用户第一次访问该站点时,您可能不想一次提示他们 50MB 的限制;所以你可能认为你可以先要求5MB,然后再用50MB重新打开?不幸的是,这不起作用 - 第二次打开尝试,增加数量,默默地成功,不提示增加大小,实际上也没有增加可用大小。

因此,FT 应用程序从一个 5MB 的“预览”数据库开始,以便在首次加载时不会提示用户。它尽量不超过这个 5MB 的限制,因为任何分配的空间都必须在所有数据库之间共享。

如果用户选择允许存储更多内容,应用程序将尝试打开一个具有 40MB 空间的不同名称的数据库(提示用户批准 50MB)。这允许该数据库中有 40MB,原始预览数据库中有 5MB,因此在插入行时都不会失败 - 因为 50MB 目前是 iOS 上的限制。

所有浏览器当前以不同方式处理数据库空间限制,因此如果您计划跨平台,请仔细测试。Desktop Safari 处理得相当好,允许更大;Chrome 根本不允许任何增加;等等。希望所有“HTML5”实现都以奇怪的方式不同:)

@Rowan 感谢您提供的信息,我的测试表明它确实是特定于域的,一旦用户被问及内存限制,它就不会再问了。到目前为止,我还没有设法超过 50Mb,似乎已经被锁定了,但是我使用的是 PouchDB,而不是直接使用 WEB SQL。
2021-04-29 20:35:05
@Rowan,这不是Chrome 错误,因此行为最终肯定会在未来发生变化吗?
2021-05-01 20:35:05
我问过一个关于 FT 应用程序的问题,介意评论一下吗?谢谢
2021-05-04 20:35:05
@ChristopherGrigg 这是特定于域的,人们已经使用黑客以这种方式分片数据。在浏览器中,您可能会收到每个子域的提示...?但是,从 iOS 7 开始,如果您让他们在使用前将页面保存到主屏幕,我认为限制已被删除(无论如何,对于 WebSQL)...给demo.agektmr.com/storage尝试测试并让我们知道结果:)
2021-05-07 20:35:05
@Rowan 你知道 50Mb 的限制是:域、设备还是浏览器特定的?我需要在客户端数据库中存储 600Mb 的视频,因此正在研究导航到不同域然后在每个域上存储 50Mb 视频的解决方法。
2021-05-13 20:35:05

此数据库是Web SQL 数据库API 的一部分,而不是 HTML5 的一部分。使用以下设置您的数据库的大小

function prepareDatabase(ready, error) {
    return openDatabase('documents', '1.0', 'Offline document storage', 50*1024*1024, function (db) {
        db.changeVersion('', '1.0', function (t) {
            t.executeSql('CREATE TABLE docids (id, name)');
        }, error);
    });
}

Introducing Web SQL Databases on HTML5 Doctor 有一个关于所有这些如何工作的非常快速的教程。

这个答案是在 2011 年发布的:P,所以不要指望保持真实
2021-05-10 20:35:05
Web SQL 不是已经死了吗?您链接的页面上写着“请注意,截至 11 月 18 日,W3C 不再积极致力于 Web SQL 数据库规范”
2021-05-16 20:35:05

我刚刚在 iPad 2(iOS 5.1.1)中使用我的离线应用程序进行了测试,我们不需要在应用程序内部执行任何特定操作。例如,我的应用程序有大约 18 MB 的离线数据。当浏览器点击 URL 时,浏览器弹出消息要求将大小增加到 25 MB,我接受了它,一切都很好。谢谢

它是特定于浏览器的。大多数人将其设置为 5MB,有些人可以选择通过某处的设置来增加它。并非所有浏览器都提供此功能。

呵呵 - Dive into HTML5 说截至 2011 年 2 月没有浏览器支持这个,所以我猜这可能是 iOS 4.3 的事情?(iOS 4.3 于 2011 年 3 月发布。)

我无法从快速 Google 中找到任何对它的引用。Apple 自己的开发人员文档可能会提到它——不过我不确定这是否适用于非 SDK 订阅者。