使用 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 (为了向后兼容)应该在 window
和 LocalFileSystem
上设置 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 在注册时卡住了