【问题标题】:Cordova: LocalFileSystem is not definedCordova:未定义 LocalFileSystem
【发布时间】:2015-01-16 13:53:58
【问题描述】:

我无法让科尔多瓦文件系统工作。我有一个具有以下依赖项的项目:

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"

app.js 中,我定义了对控制器模块的依赖:

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

控制器代码基本上是这样的:

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

然后我得到的是:

LocalFileSystem is not defined

另外,requestFileSystem 未定义。这种行为的原因可能是什么?

我正在使用 cordova 4.1.2 和 ionic 1.3.1。

编辑:这是相应的 html 标记:

<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>

【问题讨论】:

    标签: cordova cordova-plugins html5-filesystem ionic


    【解决方案1】:

    您只是没有等待 deviceReady 事件被触发,因此文件插件尚未加载。改变

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

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

    LocalFileSystem.PERSISTENT 即使在那之后也可能是未定义的(在模拟等时对我来说一直如此),但它可以替换为 1 因为它只是一个常量.

    【讨论】:

    • 我应该补充一点,显然文件传输插件阻止了deviceready 事件被触发。删除此插件并注册上述事件侦听器后一切正常。
    • 请注意,因为这个问题的标题,像我这样的人可能会来这里他们根本没有添加cordova文件插件,解决方案:cordova plugin add cordova-plugin-file
    【解决方案2】:

    requestFileSystem 不可用的原因之一是设备没有准备好。

    在窗口准备好后尝试运行代码:

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

    我得到 LocalFileSystem 没有在我的编辑器中定义,因为它是一个插件(根据我的理解),但是一旦加载了窗口,我就可以使用 requestFileSystem 并且 LocalFileSystem 可以按预期工作。

    【讨论】:

    • 虽然您的方法通过不触发 $ionicView.enter 事件来抑制错误消息。因此,window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error); 永远不会被执行。知道为什么会发生这种情况吗?
    【解决方案3】:

    对于离子注入$ionicPlatform 然后使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多