24

所以这里有一个类似的帖子html-5-filesystem-access-type-error。但是,我对这个结论不是很满意,因为我觉得它并没有真正回答这个问题——给出的解决方案是弃用的代码解决方案。有谁知道如何使用navigator而不是window按照 Chrome 控制台通知的方式使用?

我一直在使用以下内容并且它可以工作,但是 chrome 控制台不断通知我不要这样做,因为它已被弃用。

工作已弃用的代码

window.webkitStorageInfo.requestQuota(PERSISTENT, 1024*1024*280, function(grantedBytes) {
    window.webkitRequestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler); 
}, function(e) {
    console.log('Error', e); 
});

注意:onInitFserrorHandler都是在别处定义的函数,都有效。

控制台日志- 我在控制台中收到的消息如下:

'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage'
or 'navigator.webkitPersistentStorage' instead. 

所以最好的做法是停止使用不推荐使用的方法。不幸的是,当我windownavigator它替换时会崩溃(见下文)。如何使用navigator而不是window访问文件系统?

4

3 回答 3

37

以下是当前API 的两个示例。

它使用navigator.webkitPersistentStorage.requestQuota而不是弃用的window.webkitStorageInfo.queryUsageAndQuota

查询配额

navigator.webkitTemporaryStorage.queryUsageAndQuota ( 
    function(usedBytes, grantedBytes) {  
        console.log('we are using ', usedBytes, ' of ', grantedBytes, 'bytes');
    }, 
    function(e) { console.log('Error', e);  }
);

请求配额

var requestedBytes = 1024*1024*280; 

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {  
        console.log('we were granted ', grantedBytes, 'bytes');

    }, function(e) { console.log('Error', e); }
);

您必须选择临时( webkitTemporaryStorage) 或持久( webkitPersistentStorage) 存储进行查询。

当前的 Chrome 实现跟踪这个特定的规范版本,它描述了更多内容:http ://www.w3.org/TR/2012/WD-quota-api-20120703/

chromestore.js为这些数据提供了一个更简单的 API。


要回答您的原始问题,您的新代码将如下所示:

请求配额并初始化文件系统

var requestedBytes = 1024*1024*280; 

navigator.webkitPersistentStorage.requestQuota (
    requestedBytes, function(grantedBytes) {  
        window.webkitRequestFileSystem(PERSISTENT, grantedBytes, onInitFs, errorHandler); 

    }, function(e) { console.log('Error', e); }
);
于 2015-04-15T23:53:32.130 回答
10

错误消息告诉您使用navigator.webkitTemporaryStorageornavigator.webkitPersistentStorage 并且您尝试使用navigator.webkitStorageInfowhich is undefined

更新:PERSISTENT 不应该被传递给navigator.webkitTemporaryStoragenavigator.webkitPersistentStorage只传递给window.webkitRequestFileSystem. 然后就没有更多的错误了。(请参阅:文件系统 API 在 Chrome v27 和 v29 中不起作用

于 2013-07-23T12:19:52.443 回答
5

最近,我花了一些时间为具有持久存储的文件系统 API 创建一个抽象层,名为 Chromestore.js。通过使用此处讨论的相同解决方案,我已在抽象层中修复了此错误。但是有了这个API,就不用担心了,而且很干净。

https://github.com/summera/chromestore.js

它提供了一些非常方便的附加功能。它肯定需要扩展,我计划很快这样做。非常感谢任何建议/反馈!这应该使那些使用 FileSystem API 的人更容易。特别是对于那些试图存储从远程服务器检索到的大量数据的人。

示例和文档在这里:https ://github.com/summera/chromestore.js/blob/master/chromestore-api.md

我认为这有可能被扩展并使用数据和文件系统 API 做一些非常巧妙的事情。

干杯!

于 2013-12-08T01:59:00.050 回答