2012-09-26 61 views
1

我有一個phonegap應用程序在不同頁面的圖庫中顯示圖像。 我使用Google的快速按鈕https://developers.google.com/mobile/articles/fast_buttons在頁面之間切換時減少了300毫秒的延遲。 我現在用的是js文件從https://github.com/alexblack/google-fastbutton 什麼我做的是:使用Google的快速按鈕後Phonegap應用程序崩潰

按鈕:

<a data-role="button" data-theme="b" href="#" id="nextimage">Next</a> 
在JavaScript中的init方法

事件處理程序:

$('#nextimage').fastClick(function(e) { 
    showGalleryPage(nextPageIndex); }); 

這3工作正常-4點擊,但在點擊按鈕時,應用程序的崩潰和控制類型會返回到第一頁。 它在Logcat中給我沒有通知來進行調試。 我想知道一種解決此問題的方法。 有人可以幫我調試嗎? 謝謝。

回答

2

你的頁面是否有任何滾動或允許任何類型的系統UI動畫,如捏縮放等?如果是這樣,你的問題可能與PhoneGap甚至FastButton實現無關,但是你是iOS6中引入的一個討厭的bug的受害者。即使禁用FastButton並僅使用ontouchend偵聽器,並且即使使用不帶PhoneGap的獨立網頁,也可以輕鬆地重現此問題。

這個錯誤是這樣的:如果在這些系統UI動畫正在進行時創建任何間隔或超時,那些間隔和超時將不起作用,更糟糕的是,甚至在動畫完成後重新創建它們,讓他們工作。尤其是JQ動畫在這裏經常是一個問題。如果在頁面滾動時調用任何JQ動畫(這與FastButton正在使用的ontoucstart/ontouchend事件很容易做到,則動畫將失敗,動畫結束時的任何回調也會失敗。

所以解決方案:。

  • 使用CSS動畫如果可能的話這當然只是如果動畫是什麼導致你的問題擺在首位如果是一些其他類型的setInterval/setTimeout的是打碎的,CSS動畫贏得」 t幫助你

  • 爲定時器使用定製的包裝,使用定時器webkit的requestAnimationFrames在iOS6中引入。看一看,從這裏下載:https://gist.github.com/4180482

我結束了第2個解決方案去,但我不得不修復了代碼在一個地方,因爲什麼東西在初始化打破了我。在那裏說行:

if(uid.indexOf && uid.indexOf(TIMERID) > -1){ 

我不得不將其更改爲:

if(uid && uid.indexOf && uid.indexOf(TIMERID) > -1){ 

另外,原來的代碼,使嚴格的iOS6的檢查,然後才應用其包裝功能。對於那些可以即時更新內容的網站來說,這很好,但對於應用程序,我想你想要更加偏執狂一些,並且假設這可能在iOS7和之後仍然不固定(畢竟,它有時確實看起來確實如此像蘋果公司試圖破壞網絡應用程序,只要他們可以),所以你會想要一個ios6 +檢查。找到這行:

if (!navigator.userAgent.match(/OS 6(_\d)+/i)) return; 

,取而代之的是:

if(/(iPhone|iPod|iPad)/i.test(navigator.userAgent)) { 
    if(/OS [2-5]_\d(_\d)? like Mac OS X/i.test(navigator.userAgent)) { 
     // iOS 2-5, map to native Timers 
     return 
    } else if(/CPU like Mac OS X/i.test(navigator.userAgent)) { 
     // iOS 1, map to native Timers 
     return 
    } 
} 
else 
{ 
    // Not iOS, map to native Timers 
    return 
} 
相關問題