2014-01-22 26 views
3

我想使用Phonegap [cordova 3.3.0]在IOS上使用文件。我阅读了如何访问文件并在API文档中读取手机间隙。这样使用Phonegap 3.3.0访问文件为ios

$ 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还增加了插件(文件系统)后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); 
} 

此代码工作的机器人。但对于iOS,我得到的ReferenceError:找不到变量:LocalFileSystem 在这条线 -

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

你真的在监听deviceready事件来调用onDeviceReady函数吗?你有没有尝试在每一步添加console.log以确保所谓的或不是? – QuickFix

+0

yes deviceready事件正在呼叫。 这行有一些问题 window.requestFileSystem(LocalFileSystem.PERSISTENT,0,gotFS,fail); – sudam

+0

此代码适用于android。但对于Ios,我得到ReferenceError:无法找到变量:LocalFileSystem 在这一行 - window.requestFileSystem(LocalFileSystem。PERSISTENT,0,gotFS,失败); – sudam

回答

2

如果没有定义LocalFileSystem,它几乎肯定意味着该插件的JavaScript代码没有被加载。

您是否在使用任何其他Cordova API?你能否告诉我cordova.js是否从你的HTML页面加载并且它是否正确运行?

在iOS上,最好调试技术对于像这样的问题的一个是连接到iPad(或仿真器)与Safari和运行

location.reload() 
从JavaScript控制台

。如果cordova.js遇到错误,那么它可能会在加载File插件之前停止运行。

(FWIW,LocalFileSystem从未应该是一个真正的对象;它实际上是一个接口,它window应该落实我会切换到使用window.PERSISTENT用于File API规范的兼容性这就是说,科尔多瓦(为了向下。兼容性)应设置windowLocalFileSystem上的PERSISTENT和TEMPORARY符号。)

+0

我正在使用cordova3.3.0。 coedova.js加载正常,因为onDeviceReady()函数正在调用。 – sudam

+0

是的,它可能会停止运行,然后它加载文件插件。什么可能是停止的原因。 – sudam

+0

你是否尝试过我提到过的'location.reload()'技巧?如果它停止运行,那么在控制台中应该有一个错误,你可以在那里看到。 –

0

除了cordova。我也安装电话like bellow command。并创建新的应用程序并安装所有插件。现在文件读写程序正在工作。 谢谢你的帮助。

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

Phonegap 3.3.0的Filesystem有一个新的方法。如果您一直使用完整路径进行输入,则需要使用toURL()替换它。

而且在你的config.xml文件你必须添加

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

您最好的选择是去了这个链接https://github.com/apache/cordova-plugin-file/blob/master/doc/index.md

进行这些更改为我工作。希望它也适用于你。

+1

你从哪里得到这些信息?在官方PhoneGap文档中,没有关于ios持久文件位置的信息。 – 2014-04-02 01:04:40

+0

您发布404的链接。 –

相关问题