更新 chrome 版本 43.0.2357.65 m 后,JQueryMobile 1.3.2 中的弹出窗口失败
Posted
技术标签:
【中文标题】更新 chrome 版本 43.0.2357.65 m 后,JQueryMobile 1.3.2 中的弹出窗口失败【英文标题】:Popups fail in JQueryMobile 1.3.2 after update chrome version 43.0.2357.65 m 【发布时间】:2015-08-07 00:19:51 【问题描述】:最新的 chrome 版本“43.0.2357.65 m”是否为其他人破坏了 JQueryMobile 1.3.2?当我现在单击一个弹出窗口时,它会转到页面顶部并且滚动条消失。以前的版本没问题。
该问题影响了我的应用程序,但可以在 JQueryMobile 演示页面上重现:
-
使用 Chrome 43.0.2357.65 m 转到http://demos.jquerymobile.com/1.3.2/
点击弹出窗口
在弹出页面中点击页面中间的“登录”按钮。
它将转到页面顶部,滚动条将消失。
请注意,这并非每次都会发生 - 如果您再试一次,它可能会起作用,但如果您从新标签页开始执行这些步骤,它似乎会始终如一地发生。
我提出了一个关于 Chrome 的问题,但我想知道是否有人知道发生了什么,以及是否有我可以实施的解决方法。
谢谢!
【问题讨论】:
我还发现一个 1.2.0 的旧应用程序存在问题,特别是在页面转换方面。 我还在使用 1.2.x 的旧应用程序中看到页面转换问题 - 控制台中没有错误,但整个页面在转换后变白。作为一种解决方法,我们将其删除。 【参考方案1】:弹出窗口似乎很奇怪,很难复制 - 转到下面的确切链接,然后单击所述“登录”按钮似乎可以保证行为。 http://demos.jquerymobile.com/1.3.2/widgets/popup/#&ui-state=dialog
我相信下面的解决方案可能与它解决了幻灯片转换的其他有趣问题有关。 (只有有限的弹出式测试)但看起来很有希望
用下面的代码 sn-p 覆盖有问题的函数。 您必须在加载 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 and animationend") 可能意味着两个处理程序中只有 1 个(取决于浏览器)被触发离开另一个太徘徊并可能导致内存泄漏。
Chrome43 同时处理 webkitAniationEnd 和 animationend - 但是在任何给定时间只有一个。这让另一个在元素上的下一次动画发生时逗留并触发。
【讨论】:
这为我解决了问题。非常感谢Superfy。非常感谢您的帮助。【参考方案2】:作为我的一种解决方法,如果您使用 jQueryMobile API,它似乎可以工作。
$('selector').popup('open');
而不是依赖 jQueryMobile 标记
我的 Chrome 版本是“43.0.2357.81 m”,我也遇到了这个问题
【讨论】:
感谢您的建议,但不幸的是,我的应用程序已经使用 API 来打开和关闭弹出窗口,并且发现了问题。以上是关于更新 chrome 版本 43.0.2357.65 m 后,JQueryMobile 1.3.2 中的弹出窗口失败的主要内容,如果未能解决你的问题,请参考以下文章
chromedriver与chrome版本映射表(更新至v2.30)