1

我遇到了一个烦人的问题,让我困扰了大约两天。

我为框架使用 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 问题页面上添加评论。

4

1 回答 1

0

如果有人正在寻找解决此问题的快速解决方法。尝试使用 window.setTimeout 为程序执行添加延迟。有关代码,请参见上面的问题。

于 2013-05-20T10:12:52.637 回答