更新android chrome版本65后,应用程序无效,Sencha touch和cordova android

时间:2018-03-19 06:33:55

标签: android cordova extjs sencha-touch

更新了chrome版本65后,应用程序在点击一些点击事件时再次显示启动画面,它是一个混合应用程序Sencha touch和Cordova android。

2 个答案:

答案 0 :(得分:3)

编辑:这是known chrome 65 bug,标记为在Chrome 67中修复。

编辑2:确认要在Chrome 67上修复。您需要更新" Android系统WebView"在Android设备上获得修复。

我认为这是Chrome 65的错误。

我使用版本2.4.2部署了Sencha Touch应用程序。 大约一周前,我开始抱怨申请冻结了。

经过调试后,我发现这个快速修复程序通过在消息框上禁用动画来绕过问题(添加到app init,就像在app.js中一样):

Ext.Msg.defaultAllowedConfig.showAnimation = false;
Ext.Msg.defaultAllowedConfig.hideAnimation = false;

我仍然没有放弃我的动画,所以我一直在调试。几个小时之后,问题似乎源于Chrome 65在非常特定的条件下在window.getComputedStyle()附近表现不同。 Sencha Touch使用隐藏的iframe和隐藏的div来应用样式并获取应用值的计算值。然后,它使用这些计算值为消息框应用动画样式字符串。 您可以自己查看,在console.log(value)中返回getCssStyleValue函数之前添加touch/src/fx/runner/CssTransition.js,然后显示一个消息框(Ext.Msg.alert)并单击"行"在上面。 Chrome 65将输出" none",而Chromium 64将输出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版本......

希望这有帮助。

答案 1 :(得分:0)

将所有animateActiveItem替换为setActiveItem并禁用动画,然后它再次开始工作。