【问题标题】:Phonegap app crashing after using Google's Fast button使用 Google 的快速按钮后 Phonegap 应用程序崩溃
【发布时间】:2012-09-26 16:44:44
【问题描述】:

我有一个 phonegap 应用程序可以在不同页面的图库中显示图像。 我正在使用 Google 的快速按钮 https://developers.google.com/mobile/articles/fast_buttons 来减少页面切换时的 300 毫秒延迟。 我正在使用来自https://github.com/alexblack/google-fastbutton 的 js 文件 我正在做的是:

按钮:

<a data-role="button" data-theme="b" href="#" id="nextimage">Next</a>

javascript init 方法中的事件处理程序:

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

这适用于 3-4 次点击,但在某些时候,当我点击按钮时,应用程序会崩溃,并且控制会返回到第一页。 它在 Logcat 中没有通知我进行调试。 我想知道解决这个问题的方法。 有人可以帮我调试吗? 谢谢。

【问题讨论】:

    标签: java javascript jquery cordova


    【解决方案1】:

    您的页面是否有任何滚动功能或允许任何类型的系统 UI 动画,例如捏缩放等?如果是这样,您的问题可能与 PhoneGap 甚至 FastButton 实现无关,但您是 iOS6 中引入的一个讨厌的错误的受害者。即使您禁用 FastButton 并仅使用 ontouchend 侦听器,即使您使用没有 PhoneGap 的独立网页,您也可以轻松重现此问题。

    该错误的工作原理如下:如果在这些系统 UI 动画进行时创建了任何间隔或超时,则这些间隔和超时将不起作用,更糟糕的是,即使在动画完成后重新创建它们也不会让他们工作。特别是 JQ 动画在这里经常是一个问题。如果您在页面滚动时调用任何 JQ 动画(这很容易通过 FastButton 使用的 onucstart / ontouchend 事件来实现,您的动画将失败,并且您在动画结束时拥有的任何回调也将失败。

    所以解决办法:

    • 尽可能使用 CSS 动画。当然,这只是在动画首先导致您的问题的情况下。如果是其他类型的 setInterval / setTimeout 中断,CSS 动画将无济于事。

    • 为使用 iOS6 中引入的 webkit 的 requestAnimationFrames 的计时器使用定制的包装器。看看并从这里下载:https://gist.github.com/4180482

    我最终选择了第二种解决方案,但我不得不在一个地方修复代码,因为我的初始化出现了问题。在它说的那一行:

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

    我不得不把它改成:

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

    另外,原始代码会进行严格的 iOS6 检查,然后才应用其包装函数。这对于您可以即时更新内容的网站来说很好,但对于一个应用程序,我认为您想要更加偏执,并假设这可能在 iOS7 及更高版本中保持未修复(毕竟,它有时确实看起来就像 Apple 试图尽可能地破坏 Web 应用程序),所以你需要一个 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多