我遇到了一个恼人的问题,把我难住了大约两天。
我开发了一个PhoneGap应用程序,使用jQuery移动的作为框架。我最初在Android上开发它,所有工作都很好。
现在,它应该是跨平台的,但当我把它带到iPhone上时,它不会通过启动屏幕。我遵循了一些红色鲱鱼,但最终设法在JavaScript中的问题。
这是在程序执行早期对$.mobile.changePage
的调用导致的问题。看起来像是某种竞争条件,因为当我注解掉有问题的代码行时,它越过了闪屏,然后如果我从Safari开发控制台远程运行该语句,它工作正常。更让我沮丧的是,它甚至可以在iPad上的Safari浏览器中正常工作,但在PhoneGap应用程序中就不行了,这更奇怪了。
我遵循了一些建议,使用setTimeout作为一个变通方案,我从一个jQuery移动的github问题页面得到了这些建议:https://github.com/jquery/jquery-mobile/issues/3190
这使它工作了(谢天谢地!!)。然而,我做错了什么吗?我觉得应该有更好的解决方案,而不是仅仅在程序执行中添加延迟。
代码如下:
$(document).on('pageinit', '#home', onHomePageInit);
function onHomePageInit() {
$("#home").on("pageshow", checkTokenAndSync());
}
function checkTokenAndSync() {
// check for stored values
var storedId = window.localStorage.getItem('id');
var tokenValue = window.localStorage.getItem('token');
if(storedId == null || tokenValue == null) {
// no token value found, direct user to login screen to obtain one
// This doesn't work. Need to use setTimeout as below
// $.mobile.changePage("#loginDialog");
window.setTimeout(changeToLoginDialog, 1000);
}
}
function changeToLoginDialog() {
$.mobile.changePage("#loginDialog");
}
我要在github问题页面上添加一条评论。
2条答案
按热度按时间ijnw1ujt1#
在config.xml中添加以下两行
zpgglvta2#
如果有人想快速解决这个问题,可以尝试使用window.setTimeout来增加程序执行的延迟。请参阅上面的问题以获取代码。