2013-05-20 40 views
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的問題頁面。

回答

0

如果有人正在尋找快速解決此問題的解決方法。嘗試使用window.setTimeout爲程序執行添加延遲。有關代碼,請參閱上述問題

相關問題