Chrome应用使用JavaScript / jQuery / AngularJS访问外部资源

时间:2015-01-01 19:14:15

标签: javascript angularjs d3.js google-chrome-app

我正在构建一个可视化某些数据的Chrome应用。我的数据是单独收集的,并存储在与Chrome应用无关的本地文件夹中。我正在使用Angular + D3,我希望我的应用程序从指定的文件夹中获取数据。我怎么能这样做?

目前,我正在尝试使用$http服务,但它不能按照我想要的方式运行。这是代码:

var app = angular.module('myApp', []);

app.controller('dataController', ['$scope', '$http', function($scope, $http) {
  $http.get('../data/file.json').success(function(data) {
    $scope.data = data;
    console.log($scope.data);
  });
}]);

问题在于,在这种情况下,路径../data/file.json只能导致应用程序文件夹中的文件,即我无法在文件系统上指定任意目录/文件。我怎么能这样做?一般情况下,我是否可以拥有一个包含Chrome应用可以使用的资源的外部文件夹(只读对我来说足够了)?

1 个答案:

答案 0 :(得分:3)

要访问任意目录,您需要使用fileSystem.chooseEntry函数,该函数将提示用户选择目录,然后返回一个句柄。这是一个例子:

您必须先向清单文件添加必要的权限:

"permissions": [
      { "fileSystem": 
       ["directory", "retainEntries"] 
      }
  ]

阅读文件:

chrome.fileSystem.chooseEntry({ type: 'openDirectory' }, function (dirEntry) {
    dirEntry.getFile('file.json', {}, function (fileEntry) {
        fileEntry.file(function (file) {
            var reader = new FileReader();

            reader.onloadend = function (e) {
                var result = JSON.parse(this.result);
                console.log(result);
            };

            reader.readAsText(file);
        });
    });
});

要保持对跨会话的目录的访问权限,可以使用retainEntry获取可以保存的ID,然后使用restoreEntry重新获得对目录的访问权限。这样,用户只需选择一次目录。