【问题标题】:Read local file in Phonegap在 Phonegap 中读取本地文件
【发布时间】:2013-02-11 13:21:32
【问题描述】:

我正在尝试读取 Phonegap 中的本地文件以加载应用程序的语言字符串,但我无法使其工作:(

代码非常简单:

var pathToLocalFile = "/home/user/android/assets/www/js/";
var langCache = new FileReader();
langCache.onload = function(data){
  col = JSON.parse(data);
  refreshAllStrings();
};
langCache.onerror = function(err){
  debug.error(err);
};
langCache.readAsText(pathToLocalFile+currentLang+'.json');

此代码在 Ripple 模拟器上不起作用,我将其替换为

var pathToLocalFile = "file:///android_asset/www/js/";

如果是android,结果相同:

Uncaught TypeError: Object #<Console> has no method 'warning' cordova-2.4.0.js:2616
initRead cordova-2.4.0.js:2616
FileReader.readAsText cordova-2.4.0.js:2660    
loadLanguage

在 Ripple 模拟器中,我使用 google-chrome -–allow-file-access-from-files 启动 Chrome,Android 配置和清单具有所有权限和插件集。

我当然遗漏了一些东西,但你知道这可能是什么吗?

问候。

【问题讨论】:

  • 对不起,为了更好地回答你,我只需要澄清一件事。您是否尝试读取包含在 Android 应用的 www 目录中的 JS 文件?
  • 是的,这正是我想要的,一种动态加载应用程序包中文件的方法(我认为 FileRead 可以工作,我愿意接受任何其他建议)
  • 是的,FileReader 无权访问应用程序打包的文件。根据@codemonkey 的回答,最好通过 AJAX 读取这些文件。

标签: javascript android cordova file-io ripple


【解决方案1】:

如果文件位于应用的 www 文件夹下,则无需添加“/home/..”或“file:///”。即使内容捆绑在应用程序中,您也应该能够使用“AJAX”获取加载内容。

$.get('js/filename.ext');

【讨论】:

  • 这适用于 android 模拟器,但不适用于波纹(如果我可以让它在波纹上工作会很棒,做出改变非常慢,在 android 上编译和运行模拟器:()跨度>
  • 修复了它,改变了涟漪工程的跨域策略:D
  • 如何写入这个本地文件?
【解决方案2】:

您看到的错误实际上是cordova-2.4.0.js 调用了不存在的“警告”方法的结果。它应该是 console.warn。它试图警告您,现在不推荐使用字符串作为 readAsText 方法,您应该改用 File 引用。

应该发生的是控制台警告“不推荐使用带有 FileReader.readAs 函数的字符串参数。”

【讨论】:

    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 2012-12-26
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多