更新chrome版本43.0.2357.65 m后,弹出窗口在JQueryMobile 1.3.2中失败

时间:2015-05-25 13:35:57

标签: javascript html google-chrome jquery-mobile jquery-mobile-popup

最新的Chrome版本“43.0.2357.65 m”是否为其他人破解了JQueryMobile 1.3.2?当我点击弹出窗口时,它会转到页面顶部,滚动条消失。在以前的版本中没问题。

问题影响了我的应用程序,但可以在JQueryMobile演示页面上重现:

  1. 使用Chrome 43.0.2357.65 m转到http://demos.jquerymobile.com/1.3.2/
  2. 点击弹出
  3. 在弹出页面上,点击页面中间的“登录”按钮。
  4. 它将转到页面顶部,滚动条将消失。
  5. 请注意,每次都不会发生这种情况 - 如果您再次尝试它可能会有效,但如果您从新选项卡开始执行该步骤,它似乎会始终如一地发生。

    我提出了Chrome的一个问题,但只是想知道是否有人知道发生了什么,以及是否有解决方法我可以实施。

    谢谢!

2 个答案:

答案 0 :(得分:10)

弹出窗口似乎很奇怪,难以复制 - 转到下面的确切链接,然后单击所述“登录”按钮似乎可以保证行为。 http://demos.jquerymobile.com/1.3.2/widgets/popup/#&ui-state=dialog

我相信下面的解决方案可能是相关的,它解决了幻灯片转换的其他有趣问题。 (只有弹出窗口的有限测试)但看起来很有希望

使用下面的代码段覆盖有问题的功能。 你必须在加载jquerymobile js

之前调用它

// Override of $.fn.animationComplete muse be called before initialise jquery mobile js
   $(document).bind('mobileinit', function() {
     $.fn.animationComplete = function(callback) {
       if ($.support.cssTransitions) {
         var superfy= "WebKitTransitionEvent" in window ? "webkitAnimationEnd" : "animationend";
         return $(this).one(superfy, callback);
       } else {

         setTimeout(callback, 0);
         return $(this);
       }
     };

   })

<强>背景 jqueryMobile 1.3.2在某种程度上错误地实现了jquery one()事件处理程序附件。

.one() - “将处理程序附加到元素的事件。处理程序每​​个事件类型每个元素最多执行一次”:http://api.jquery.com/category/events/:基本上是事件触发然后被删除。

然而,使用 one()同时调用(“webkitAnimationEnd和animationend”)可能意味着两个处理程序中只有1个(取决于浏览器)被解雇另一个太流连,可能导致内存泄漏。

Chrome43处理webkitAniationEnd和animationend - 但在任何给定时间只能处理一个。这使得另一个留下并在下一次元素上的动画发生时触发。

答案 1 :(得分:0)

作为一种解决方法,如果您使用jQueryMobile API,它似乎有效。

$('selector').popup('open');

而不是依赖于jQueryMobile标记

我的Chrome版本是“43.0.2357.81米”,我也遇到了这个问题