requestFileSystem 永远不会在 iOS 上返回 Cordova 3.4

Posted

技术标签:

【中文标题】requestFileSystem 永远不会在 iOS 上返回 Cordova 3.4【英文标题】:requestFileSystem never returns Cordova 3.4 on iOS 【发布时间】:2014-05-10 15:24:50 【问题描述】:

我正在更新我的 cordova 应用程序,该应用程序最后一次发布是在 1 月 - 在文件插件发生重大变化之前。在涟漪(旧式)中一切正常,但在 ios 模拟器或 iOS 设备(iOS 7.1)上运行时,我的 window.requestFileSystem 调用将永远不会返回(既不失败也不成功)。持久文件系统和临时文件系统都会出现此行为。

我猜我有一些配置问题。但是,我尝试了一切都无济于事。添加控制台消息我发现我的代码中的 window.requestFileSystem 调用确实在插件的 requestFileSystem.js 中调用 requestFileSystem。我还发现所有 CDVFile 方法都被调用(按此顺序:initWithWebView、pluginInitialize、getExtraFileSystemsPreference、getAvailableFileSystems、registerExtraFileSystems(注册库、库-不同步、文档、文档-不同步、缓存、捆绑、根)。

但是,requestFileSystem.js 中对“requestFileSystem”的 exec 调用永远不会返回,也不会执行 CDVFile 中的方法。 (注意这是在 deviceready 事件返回之后。)

关于目前可能出现的问题或如何进一步调试有什么建议吗?

【问题讨论】:

你使用的是什么版本的文件插件? 使用最新发布的版本(1.1.0) 更新:总体上仍在努力解决文件系统问题。但是,如果我在 deviceready 之后立即调用它(而不是稍后),则不会发生 requestFileSystem 永远不会返回的问题。我的应用程序正在使用 jquery mobile 和骨干网 - 以及各种其他库 - 但此时不知道可能导致这种行为的原因。 在使用 File 插件之前,您必须等待 deviceReady 事件触发 - 但您是说这会失败:setTimeout(someFunctionThatRequestsFileSystem, 10000)?也就是说,deviceReady肯定会在10s内被调用,但是超时后你会没有响应? 另外,可能值得消除所有其他库(即使在演示项目中)以找到问题的根源。可能是其他库妨碍了 【参考方案1】:

原来这里遇到的问题与文件系统插件没有直接关系。 requestFileSystem(或上面提到的其他文件插件调用,如 getDirectory)从未返回的原因最终是cordova.exec 调用从未返回 - 这将在控制台插件(org.apache.cordova.console)加载后的任何时候发生(然后任何后续的 cordova.exec 调用都会挂起)。删除控制台插件解决了我的问题。

为什么删除控制台插件是我不太确定的修复方法。但是,我确实有自己的 logger.js,它可能会以某种方式干扰控制台插件?希望这是我的代码特有的问题。不知道为什么这只是我在 iOS 而不是 android 上的问题。

【讨论】:

我知道 cordova 控制台插件必须在 iOS/Android 上做不同的事情,所以这可能就是你看到不同行为的原因。如果您可以在代码中准确复制导致问题的原因,也许您应该提交一个问题,以便插件可以更好地屏蔽此类事情(或者至少可以让大家知道 not 是什么做)?

以上是关于requestFileSystem 永远不会在 iOS 上返回 Cordova 3.4的主要内容,如果未能解决你的问题,请参考以下文章

window.requestFileSystem 方法是不是已弃用?

window.requestFileSystem 在 3.3.0 版中未定义

SystemVolumeDidChangeNotification 永远不会在 iOS 14 上触发

Mongoose - 查询 exec() 永远不会在模型方法中解析

为啥 IsDialogMessage() 可能永远不会返回?

Objective-C 完成调用永远不会完成