web-dev-qa-db-ja.com

window.webkitStorageInfo HTML5ファイルシステムAPIの代わりにナビゲーターを使用する方法

そのため、同様の投稿がここにあります html-5-filesystem-access-type-error 。しかし、私はそれが実際に質問に答えたとは感じていないため、結論にあまり満足していません-与えられた解決策は非推奨のコード解決策です。 Chromeコンソールが行うことを通知しているので、navigatorの代わりにwindowを使用する方法を知っていますか?

私は以下を使用してきましたが、動作しますが、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を使用してファイルシステムにアクセスするにはどうすればよいですか?

23
Arthur Weborg

以下は、currentAPIを使用した2つの例です。

非推奨の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); }
);

temporarywebkitTemporaryStorage)またはpersistentwebkitPersistentStorage)ストレージのいずれかを選択してクエリする必要があります。

現在の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); }
);
35
Paul Irish

エラーメッセージは、navigator.webkitTemporaryStorageまたはnavigator.webkitPersistentStorageを使用するように指示し、undefinedであるnavigator.webkitStorageInfoを使用しようとします。

更新:PERSISTENTはnavigator.webkitTemporaryStorageまたはnavigator.webkitPersistentStorageに渡されるのではなく、window.webkitRequestFileSystemにのみ渡される必要があります。その後、これ以上のエラーはありません。 (参照: Chrome v27&v29 で機能しないファイルシステムAPI)

10
dievardump

最近、Chromestore.jsと呼ばれる永続ストレージを使用したFilesystem APIの抽象化レイヤーを作成するのに少し時間を費やしました。ここで説明したのと同じソリューションを使用して、抽象化レイヤーのこのエラーを修正しました。しかし、このAPIを使用すると、心配する必要がなく、クリーンです。

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

それは同様にかなり便利ないくつかの追加機能を提供します。間違いなく拡張する必要がありますが、すぐにそれを行う予定です。どんな提案/フィードバックも大歓迎です!これにより、FileSystem APIを使用しているユーザーにとって簡単になります。特に、リモートサーバーから取得した大量のデータを保存しようとする場合。

例とドキュメントはこちら: https://github.com/summera/chromestore.js/blob/master/chromestore-api.md

これは拡張される可能性があり、データとFilesystem APIを使って本当にすてきなことをする可能性があると思います。

乾杯!

5
Ari