在更新chrome版本65之后,应用程序在录制一些点击事件时再次显示闪屏,这是一个Sencha touch和Cordova android的混合应用程序。
发布于 2018-03-26 13:39:30
编辑:这是一个在chrome 67中标记为固定的known chrome 65 bug。
编辑2:确认已在Chrome 67上修复。你需要在安卓设备上更新“安卓系统WebView”来获得修复。
我相信这是Chrome65的一个bug。
我有一个使用2.4.2版的已部署的Sencha Touch应用程序。大约一周前,我开始收到关于应用程序冻结的投诉。
调试后,我发现这个快速修复通过禁用消息框上的动画绕过了这个问题(添加到您的应用程序初始化,就像在app.js中一样):
Ext.Msg.defaultAllowedConfig.showAnimation = false;
Ext.Msg.defaultAllowedConfig.hideAnimation = false;
我仍然没有放弃我漂亮的动画,所以我一直在调试。几个小时后,问题似乎源于Chrome65在非常特定的条件下在window.getComputedStyle()
上表现不同。Sencha Touch使用一个隐藏的iframe和一个隐藏的div来应用样式并获取应用值的计算值。然后,它使用这些计算值将动画样式字符串应用于消息框。您可以自己查看它,在touch/src/fx/runner/CssTransition.js
中的getCssStyleValue
函数返回之前添加console.log(value)
,然后显示一个消息框(Ext.Msg.alert)并单击"OK“。Chrome65将输出"none",而Chrome64输出matrix(1, 0, 0, 1, 0, 0)
。我使用Chromium 64.0.3282.0 (Developer Build) (64-bit)对此进行了测试。请注意,如果逐行调试,错误将不会出现。这似乎是Chromium方面的一个竞争条件。
我可以不使用Sencha Touch (JsFiddle)直接在浏览器上重现这个问题:
var iframe = document.createElement('iframe');
var iframeStyle = iframe.style;
iframeStyle.setProperty('visibility', 'hidden', 'important');
iframeStyle.setProperty('width', '0px', 'important');
iframeStyle.setProperty('height', '0px', 'important');
iframeStyle.setProperty('position', 'absolute', 'important');
iframeStyle.setProperty('border', '0px', 'important');
iframeStyle.setProperty('zIndex', '-1000', 'important');
document.body.appendChild(iframe);
var iframeDocument = iframe.contentDocument;
iframeDocument.open();
iframeDocument.writeln('</body>');
iframeDocument.close();
var testElement = iframeDocument.createElement('div');
testElement.style.setProperty('position', 'absolute', 'important');
iframeDocument.body.appendChild(testElement);
testElement.style.setProperty("transform", "translateX(0) translateY(0) translateZ(0) rotate(0) rotateX(0) rotateY(0) rotateZ(0) skewX(0) skewY(0) scaleX(1) scaleY(1) scaleZ(1)");
var computed = window.getComputedStyle(testElement).getPropertyValue("transform");
alert(computed);
如果你使用它,你会发现只有当DIV在iframe内部,并且在这些特定的条件下,才会发生这种情况。正如我所说的,我的临时解决方案是禁用动画,但我现在将继续并尝试向Chromium项目提交错误报告。
不幸的是,我并不乐于查看这段Sencha Touch代码来尝试找到另一种方法来获得计算值。我认为Sencha做了很多工作来确保所有这些东西都能跨浏览器工作,所以我真的希望这个问题能在Chrome即将发布的版本中得到解决。
我认为这是对Grigoriy提到的Android 8用户代理头错误的补充,因为它也发生在Chrome的桌面版本上。
我吸取了教训,确保定期在Chrome Beta或Dev版本上测试……
希望这能有所帮助。
发布于 2018-04-01 00:04:19
用setActiveItem替换了所有animateActiveItem并禁用了动画,然后它又开始工作了。
https://stackoverflow.com/questions/49357047
复制相似问题