首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >更新android chrome版本65后,应用程序无法工作,Sencha touch和cordova android

更新android chrome版本65后,应用程序无法工作,Sencha touch和cordova android
EN

Stack Overflow用户
提问于 2018-03-19 14:33:55
回答 2查看 969关注 0票数 2

在更新chrome版本65之后,应用程序在录制一些点击事件时再次显示闪屏,这是一个Sencha touch和Cordova android的混合应用程序。

EN

回答 2

Stack Overflow用户

发布于 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中一样):

代码语言:javascript
复制
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)直接在浏览器上重现这个问题:

代码语言:javascript
复制
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版本上测试……

希望这能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2018-04-01 00:04:19

用setActiveItem替换了所有animateActiveItem并禁用了动画,然后它又开始工作了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49357047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档