我有一个烦人的问题让我难倒了两天。
我使用jQuery mobile为框架开发了一个PhoneGap应用程序。我最初在Android上开发它,一切正常。
现在,它应该是跨平台的,但当我把它带到iPhone时,它不会超过启动画面。我跟着一些红色的鲱鱼,但最终成功地解决了JavaScript中的问题。
在程序执行的早期调用$.mobile.changePage
导致了问题。似乎是某种竞争条件,因为当我注释掉有问题的代码行时,它已经超过了启动画面,然后如果我从Safari开发控制台远程运行语句,它就可以了。为了增加我的挫败感,它甚至可以在iPad上的Safari浏览器中正常工作,但不在PhoneGap应用程序中,这更奇怪。
我遵循了一些建议,使用setTimeout作为解决方法,我从jQuery mobile 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问题页面添加评论。
答案 0 :(得分:0)
如果有人正在寻找针对此问题的快速解决方法。尝试使用window.setTimeout为程序执行添加延迟。请参阅上面的问题代码。