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

8wtpewkr  于 2022-11-15  发布在  jQuery
关注(0)|答案(2)|浏览(153)

我遇到了一个恼人的问题,把我难住了大约两天。
我开发了一个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问题页面上添加一条评论。

ijnw1ujt

ijnw1ujt1#

在config.xml中添加以下两行

<preference name="scheme" value="app" /> 
<preference name="hostname" value="localhost" />
zpgglvta

zpgglvta2#

如果有人想快速解决这个问题,可以尝试使用window.setTimeout来增加程序执行的延迟。请参阅上面的问题以获取代码。

相关问题