你的頁面是否有任何滾動或允許任何類型的系統UI動畫,如捏縮放等?如果是這樣,你的問題可能與PhoneGap甚至FastButton實現無關,但是你是iOS6中引入的一個討厭的bug的受害者。即使禁用FastButton並僅使用ontouchend偵聽器,並且即使使用不帶PhoneGap的獨立網頁,也可以輕鬆地重現此問題。
這個錯誤是這樣的:如果在這些系統UI動畫正在進行時創建任何間隔或超時,那些間隔和超時將不起作用,更糟糕的是,甚至在動畫完成後重新創建它們,讓他們工作。尤其是JQ動畫在這裏經常是一個問題。如果在頁面滾動時調用任何JQ動畫(這與FastButton正在使用的ontoucstart/ontouchend事件很容易做到,則動畫將失敗,動畫結束時的任何回調也會失敗。
所以解決方案:。
我結束了第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
}