我遇到了一个烦人的问题,让我困扰了大约两天。
我为框架使用 jQuery mobile 开发了一个 PhoneGap 应用程序。我最初在 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 问题页面上添加评论。