Bastian
Bastian

Reputation: 4738

Cordova: LocalFileSystem is not defined

I am not able to get the cordova file system to work. I have a project with the following dependencies:

com.ionic.keyboard 1.0.3 "Keyboard"
org.apache.cordova.console 0.2.12 "Console"
org.apache.cordova.device 0.2.13 "Device"
org.apache.cordova.file 1.3.2 "File"
org.apache.cordova.file-transfer 0.4.8 "File Transfer"

In app.js I define a dependency on a controller module:

angular.module('starter', ['ionic', 'controllers']);

The controller code is basically this:

angular.module('controllers', [])
  .controller('GalleryCtrl', function ($scope) {
    function success() {...}
    function error() {...}
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error);
  }
}

What I then get is:

LocalFileSystem is not defined

Also, requestFileSystem is undefined. What could be the reason for this behavior?

I am using cordova 4.1.2 and ionic 1.3.1.

EDIT: This is the according html markup:

<body ng-app="starter" ng-controller="GalleryCtrl">
<ion-nav-view>
    <ion-slide-box id="slideBox">
        <ion-slide ng-repeat="..."> <!-- details omitted -->
        </ion-slide>
    </ion-slide-box>
</ion-nav-view>
</body>

Upvotes: 9

Views: 20889

Answers (3)

avck
avck

Reputation: 3693

For ionic inject $ionicPlatform and then use :

$ionicPlatform.ready(function() {       
   window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error);
}, false);

Upvotes: -1

Roope Hakulinen
Roope Hakulinen

Reputation: 7405

You simply aren't waiting for deviceReady event to be fired and thus the File plugin isn't loaded yet. Change

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error);

to

document.addEventListener("deviceready", function() { 
  window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error);
}, false);

The LocalFileSystem.PERSISTENT might be undefined even after that (has been for me while emulating etc.) but it can be replaced with 1 as it is just a constant.

Upvotes: 11

Phil Hannent
Phil Hannent

Reputation: 12317

One of the reasons for the requestFileSystem not being available is because the device is not ready.

Try running the code once the window is ready:

$scope.$on('$ionicView.enter', function(event, data) {
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error);
});

I get the LocalFileSystem is not defined in my editor because its a plugin (from my understanding) but once the window is loaded I can use the requestFileSystem and LocalFileSystem works as expected.

Upvotes: -1

Related Questions