在本机浏览器上打开外部链接后,kendo UI mobile ListView挂起

时间:2013-02-19 10:13:16

标签: android ios cordova mobile kendo-ui

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

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

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

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

在Android上,屏幕挂在原始视图上,再次按下后退按钮时,屏幕不会冻结,可以刷新。

但是,在iOS上,屏幕也会挂在原始视图上。点击屏幕时,移动完整视图(带有布局)。无法解冻此屏幕。

如何解决这个问题,以便在从原生浏览器切换回应用程序后,屏幕可以解除干扰?

非常感谢你的帮助。

更新1:

我将原始标记更改为标记,现在每个人都可以使用。但我仍然很想知道它是否是Kendo UI Mobile的某种错误。

1 个答案:

答案 0 :(得分: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中有一条评论说:"这应该在某些时候清理(widget by widget),如果没有转换,则重构为不依赖于完整回调的小部件。&#34 ,显然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);
}