Onsen UI V2 Angular 1 Splitterテンプレートを使って開発を始めました。
http://docs.monaca.io/ja/reference/cordova_6.2/file/
http://poyo.hatenablog.jp/entry/2016/11/05/014205
を参考にCordovaプラグインのFileを有効にして、開発を進めているのですが、
Uncaught TypeError: window.requestFileSystem is not a function
というエラーが出てファイル一覧が取得できません。
何をどうしたらエラーが出なくなるのか分からずに困っています。
コメントアウトは試行錯誤の跡として残してあります。
どうか助けをよろしくお願いします。
<!DOCTYPE HTML>
<html id="myApp">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
<meta http-equiv="Content-Security-Policy" content="default-src * data:; style-src * 'unsafe-inline'; script-src * 'unsafe-inline' 'unsafe-eval'">
<script src="lib/angular/angular.min.js"></script>
<script src="lib/onsenui/js/onsenui.min.js"></script>
<script src="lib/onsenui/js/angular-onsenui.min.js"></script>
<script src="components/loader.js"></script>
<link rel="stylesheet" href="components/loader.css">
<link rel="stylesheet" href="lib/onsenui/css/onsenui.css">
<link rel="stylesheet" href="lib/onsenui/css/onsen-css-components.css">
<link rel="stylesheet" href="css/style.css">
<script>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
//alert("Fileプラグインが利用できます。");
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
//window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error);
var grantedBytes = 0;// 1024*1024*10; // 10MB
window.requestFileSystem(PERSISTENT, grantedBytes, /*$scope.*/fileSystemReceived, /*$scope.*/errorHandler);
}
myApp = ons.bootstrap();
myApp.controller('AppController', function($scope) {
this.load = function(page) {
$scope.splitter.content.load(page);
$scope.splitter.left.close();
};
this.toggle = function() {
$scope.splitter.left.toggle();
};
});
myApp.controller("SampleController", ["$scope", "FileSystem", function($scope, FileSystem){
FileSystem.getFileSystem()
.then(function(fs){
$scope.ROOT_PATH = fs.root.toURL(); /* ルートへのパスを取得 */
},
function(error){
alert("エラーです");
});
$scope.fileSystemReceived = function (fileSystem) {
fileSystem.root.getFile("souvenirs.json", { create: true, exclusive: false }, $scope.fileEntryReceived, $scope.errorHandler);
}
$scope.fileEntryReceived = function (fileEntry) {
fileEntry.createWriter($scope.fileWriterReceived, errorHandler);
}
$scope.fileWriterReceived = function (fileWriter) {
var listeSouvenirsText = angular.toJson($scope.listeSouvenirs);
fileWriter.write(listeSouvenirsText);
}
$scope.errorHandler = function (error) {
console.log(error);
}
}]);
myApp.factory("FileSystem", ["$q", function($q){
return {
getFileSystem: function(){
let deferred = $q.defer();
//window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
var requestedBytes = 1024*1024*10; // 10MB
navigator.webkitPersistentStorage.requestQuota (
requestedBytes,
function (grantedBytes) {
window.requestFileSystem(PERSISTENT, grantedBytes, /*$scope.*/fileSystemReceived, /*$scope.*/errorHandler);
},
/*$scope.*/errorHandler
);
/*
window.requestFileSystem(window.PERSISTENT, 0, function(filesystem){
deferred.resolve(filesystem);
}, function(error){
deferred.reject(error);
});
*/
return deferred.promise;
}
};
}]);
function errorHandler(error) {
console.log(error);
}
function fileSystemReceived(fileSystem) {
fileSystem.root.getFile("souvenirs.json", { create: true, exclusive: false }, $scope.fileEntryReceived, $scope.errorHandler);
}
ons.ready(function() {
//console.log("Onsen UI is ready!");
//window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
});
</script>
</head>
<body>
<ons-splitter ng-controller="AppController as app" var="splitter">
<ons-splitter-side side="left" width="220px" collapse swipeable>
<ons-page>
<ons-list>
<ons-list-item ng-click="app.load('home.html')" tappable>
Home
</ons-list-item>
<ons-list-item ng-click="app.load('settings.html')" tappable>
Settings
</ons-list-item>
<ons-list-item ng-click="app.load('about.html')" tappable>
About
</ons-list-item>
</ons-list>
</ons-page>
</ons-splitter-side>
<ons-splitter-content page="test.html"></ons-splitter-content>
</ons-splitter>
<ons-template id="test.html" ng-controller="SampleController">
<ons-page>
<ons-toolbar>
<div class="center">Test</div>
</ons-toolbar>
<h1>てすと</h1>
<span>{{ROOT_PATH}}</span>
</ons-page>
</ons-template>
</body>
</html>