そのため、同様の投稿がここにあります 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);
});
注:onInitFs
とerrorHandler
は両方とも他で定義された関数であり、機能します。
コンソールログ-コンソールに表示されるメッセージは次のとおりです。
'window.webkitStorageInfo' is deprecated. Please use 'navigator.webkitTemporaryStorage'
or 'navigator.webkitPersistentStorage' instead.
したがって、ベストプラクティスは、非推奨のメソッドの使用を停止することです。残念ながら、window
をnavigator
に置き換えるとクラッシュします(以下を参照)。 navigator
の代わりにwindow
を使用してファイルシステムにアクセスするにはどうすればよいですか?
以下は、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); }
);
temporary(webkitTemporaryStorage
)またはpersistent(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); }
);
エラーメッセージは、navigator.webkitTemporaryStorage
またはnavigator.webkitPersistentStorage
を使用するように指示し、undefined
であるnavigator.webkitStorageInfo
を使用しようとします。
更新:PERSISTENTはnavigator.webkitTemporaryStorage
またはnavigator.webkitPersistentStorage
に渡されるのではなく、window.webkitRequestFileSystem
にのみ渡される必要があります。その後、これ以上のエラーはありません。 (参照: Chrome v27&v29 で機能しないファイルシステムAPI)
最近、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を使って本当にすてきなことをする可能性があると思います。
乾杯!