Cordova 3.1.0 S3 Android 4.2和Nexus 4 Android 4.4
我看到来自cordova图书馆的相当奇怪的行为。在我的项目的根html文件中包含一个init文件。当我使用window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, setFS, fail);
第一次尝试似乎没有效果。
console.log("Loaded INIT");
document.addEventListener("deviceready", deviceIsReady, false);
function setFS(fileSystem){
window.rootFS = fileSystem.root;
console.log("FS SET");
}
function fail(error){
console.log(error);
}
function deviceIsReady() {
window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
//window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, setFS, fail);
var attempts = 0;
var intervalID = window.setInterval(function(){
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, setFS, fail);
console.log("Requested fileSystem");
attempts++;
if(window.rootFS || attempts>3)
clearInterval(intervalID);
},500);
console.log("INIT_________");
}
上面的代码在应用程序启动时产生以下输出。
"Requested fileSystem"
"FS SET"
"Requested fileSystem"
"INIT_________"
"Loaded INIT"
这是为了获取fileSystem.root而必须实现的hacky变通方法。现在两次调用deviceIsReady会让我相信“deviceready”事件正在运行。正如您所看到的,setFS仅被调用一次 - 第二次。当我通过输入按钮的onclick处理程序以编程方式调用window.requestFileSystem时,我看到类似的行为。在第一次单击“setFS”没有被调用,但第二次单击按钮它工作正常。此外,此间隔最初是在满足相同条件时退出的do while循环。我有完全相同的结果。它将在第二次退出。
最后,我在尝试使用fileTransfer.download时看到了类似的行为。我必须循环两次才能使它工作。现在我无法将其推向生产!有人请帮忙!
答案 0 :(得分:1)
我尝试了你的例子,它在我的N4上运行4.4时按预期工作。
在调用requestFileSystem之后,您正在检查window.rootFS
,这有点可疑。 setFS回调将以异步方式调用,因此不可能在您检查它的地方设置它。