jQuery mobile $ .mobile.changePage在PhoneGap的iPhone上无法正常工作

时间:2013-05-20 10:11:42

标签: iphone cordova jquery-mobile

我有一个烦人的问题让我难倒了两天。

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

1 个答案:

答案 0 :(得分:0)

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