使用 Phonegap 3.3.0 for ios 访问文件

Posted

技术标签:

【中文标题】使用 Phonegap 3.3.0 for ios 访问文件【英文标题】:Access files using using Phonegap 3.3.0 for ios 【发布时间】:2014-01-22 12:41:02 【问题描述】:

我正在尝试使用 Phonegap[cordova 3.3.0] 在 ios 上处理文件。我阅读了如何访问文件并在电话间隙的 API 文档中阅读它们。还添加了这样的插件

  $ cordova plugin add org.apache.cordova.file
    $ cordova plugin ls
    [ 'org.apache.cordova.file' ]
    $ cordova plugin rm org.apache.cordova.file

 $ cordova plugin add org.apache.cordova.file-transfer
    $ cordova plugin ls
    [ 'org.apache.cordova.file',
      'org.apache.cordova.file-transfer' ]
    $ cordova plugin rm org.apache.cordova.file-transfer

函数 gotFS(fileSystem) 在 onDeviceReady() 函数之后没有调用。

这是我正在使用的代码:

       function onDeviceReady() 
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);


function gotFS(fileSystem) 
    fileSystem.root.getFile("readme.txt", null, gotFileEntry, fail);


function gotFileEntry(fileEntry) 
    fileEntry.file(gotFile, fail);


function gotFile(file)
    readDataUrl(file);
    readAsText(file);


function readDataUrl(file) 
    var reader = new FileReader();
    reader.onloadend = function(evt) 
        console.log("Read as data URL");
        console.log(evt.target.result);
    ;
    reader.readAsDataURL(file);


function readAsText(file) 
    var reader = new FileReader();
    reader.onloadend = function(evt) 
        console.log("Read as text");
        console.log(evt.target.result);
    ;
    reader.readAsText(file);


function fail(evt) 
    console.log(evt.target.error.code);

此代码适用于 android。但是对于 Ios,我得到 ReferenceError: Can't find variable: LocalFileSystem 在这一行 -

window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail);

【问题讨论】:

你真的会监听deviceready事件来调用onDeviceReady函数吗?您是否尝试在每个步骤中添加 console.log 以确定是否调用了什么? 是的 deviceready 事件正在调用。此行有问题 window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 此代码适用于 android。但是对于 Ios,我得到 ReferenceError: Can't find variable: LocalFileSystem in this line - window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, gotFS, fail); 您显示的有关插件安装的行包含“cordova plugin rm”,我希望您没有运行它。还有你是如何启动你的项目的? 是的,我没有运行 cordova plugin rm.As rm for remove 所以没有运行那行。我正在为设备(ipad)提供午餐项目。 【参考方案1】:

如果没有定义 LocalFileSystem,几乎可以肯定意味着插件的 javascript 代码没有被加载。

您是否在使用任何其他 Cordova API?您能否判断是否从您的 html 页面加载了 cordova.js 以及它是否正常运行?

在 iOS 上,解决此类问题的最佳调试技术之一是使用 Safari 连接到 iPad(或模拟器),然后运行

location.reload()

来自 JavaSCript 控制台。如果 cordova.js 遇到错误,那么它可能会在加载文件插件之前停止运行。

(FWIW,LocalFileSystem 从来不应该是一个真实的对象;它实际上是一个接口,window 应该实现它。我会切换到使用window.PERSISTENT 以与文件 API 规范兼容。也就是说,Cordova (为了向后兼容)应该在 windowLocalFileSystem 上设置 PERSISTENT 和 TEMPORARY 符号。)

【讨论】:

我使用的是cordova3.3.0。 coedova.js 加载正常,因为 onDeviceReady() 函数正在调用。 是的,它可能会在加载文件插件之前停止运行。什么可能是停止的原因。 你试过我提到的location.reload() 技巧吗?如果它停止运行,那么您应该可以在控制台中看到一个错误。 $ sudo npm install -g phonegap 用法 $ phonegap create my-app $ cd my-app $ phonegap run android 在科尔多瓦旁边。我也像下面的命令一样安装phonegap。并制作新应用程序并安装所有插件。现在文件读写程序正在工作。谢谢你的帮助 。 $ sudo npm install -g phonegap $ phonegap create my-app $ cd my-app【参考方案2】:

Phonegap 3.3.0 的文件系统有一种新方法。如果您一直使用完整路径进行输入,则需要将其替换为 toURL()。

同样在你的 config.xml 文件中你必须添加

<preference name="iosPersistentFileLocation" value="Compatibility" />

最好的办法是浏览此链接https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md

进行这些更改对我有用。希望它也对你有用。

【讨论】:

您从何处获得此信息?在官方的 PhoneGap 文档中没有关于 ios Persistent File Location 的内容。 你发布的404链接。【参考方案3】:

在科尔多瓦旁边。我还安装了 phonegap like bellow command。并制作新应用程序并安装所有插件。现在文件读写程序正在工作。 谢谢你的帮助。

$ sudo npm install -g phonegap 
$ phonegap create my-app 
$ cd my-app 

【讨论】:

以上是关于使用 Phonegap 3.3.0 for ios 访问文件的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap 3.3.0 iOS FileSystem 插件未触发完成、进度或错误

phonegap 3.3.0 版在 iphone 4 中不起作用

PhoneGap 上的 OneSignal for iOS 不注册设备

使用 Phonegap for Ios 实现 Urban Airship 在注册时卡住了

CanvasCamera for iOS PhoneGap / Cordova

Jquery mobile 1.4.0 和 phonegap 3.3.0 无法正常工作