3

在 Kendo UI Mobile ListView 中,当单击链接时,会调用本地浏览器打开外部链接的脚本。

PhoneGap 脚本如下: 在 Android 上:navigator.app.loadUrl(link, { openExternal:true } ); 在 iOS 上:window.open(link, '_system');

该链接可以在相应的本机浏览器上打开。

但是,当用户从本机浏览器切换回应用程序时,会出现一些问题。

在Android上,屏幕挂在原来的视图上,当再次按下返回键时,屏幕会解冻,可以刷新。

然而,在 iOS 上,屏幕也挂在原始视图上。在屏幕上点击时,会移动整个视图(带有布局)。无法取消冻结此屏幕。

如何解决这个问题,以便在从本机浏览器切换回应用程序后屏幕可以取消冻结?

非常感谢您的帮助。

更新1:

我将原始标签更改为标签,现在一切正常。但我仍然很好奇这是否是 Kendo UI Mobile 的某种错误。

4

1 回答 1

0

Kendo Mobile 完全挂起页面存在严重问题,使应用程序对触摸/鼠标完全没有响应。有问题的 CSS 在 Loader.transition() 中,this.container.css("pointer-events", "none")它相当于:

document.body.style.pointerEvents = "none";

哎哟——太丑了。此外,在 _attachCapture 中,所有鼠标和触摸事件都有攻击性 JavaScript:

event.preventDefault();

如果使用带有嵌入式整页 WebView/UIWebView 的应用程序(需要关闭并重新启动应用程序),则致命。

如果出现以下情况,可能会发生挂起:

  • 您的代码中有异常(即使在不明显的地方),
  • 你打错了一个过渡(没有例外,只是挂起),
  • 由于某种原因,用户的浏览器没有正确触发 transitionEnd 事件(这对于一个用户的最新 Chrome 浏览器是可重复的。
  • 页面转换和Loader之间的交互存在失败模式(取决于时间,无法重复),
  • 多种其他原因

请注意,Kendo 中有一条评论说:“这应该在某个时候清理(通过小部件的小部件),如果没有发生转换,则重构为不依赖完整回调的小部件。”,所以很明显 Telerik 知道有一个问题。

您可以在开发过程中使用以下代码至少在 Kendo Mobile 出现故障时发出警告:

var transitionTimer;
kendo.mobile.ui.Loader.prototype.wasTransition = kendo.mobile.ui.Loader.prototype.transition;
kendo.mobile.ui.Loader.prototype.transition = function() {
    transitionTimer = setTimeout(function() {
        alert('Kendo has hung the page');
    }, 10000);
    this.wasTransition.apply(this, arguments);
}
kendo.mobile.ui.Loader.prototype.wasTransitionDone = kendo.mobile.ui.Loader.prototype.transitionDone;
kendo.mobile.ui.Loader.prototype.transitionDone = function() {
    clearTimeout(transitionTimer);
    this.wasTransitionDone.apply(this, arguments);
}
于 2015-02-02T03:05:30.377 回答