【发布时间】:2015-12-10 15:08:57
【问题描述】:
前段时间我遇到了一个问题,当我的 ExtJS 5 应用程序嵌入到 IFrame 中时,触摸设备上的滚动不再起作用(请参阅 this thread)。
我已经通过覆盖 Ext 框架中的一些东西解决了这个问题(请参阅 the solution)。
解决方案的一个步骤是将touchmove 事件分派给文档本身(框架阻止默认处理此事件):
// ...
touchmove: function(e) {
window.document.dispatchEvent(e.event);
}
// ...
尽管这个解决方案基本上可以工作,但它有一个缺陷:
调度事件会在每个 touchmove 事件上引发未处理的 InvalidStateError,这显然很常见:
如果我只是在 dispatchEvent 语句周围放置一个 try/catch,则在触摸设备上的 IFrame 内滚动将不再起作用,就好像根本不调用它一样。
如何在不再次中断滚动的情况下摆脱错误?
可以滚动但发生许多未处理错误的Testapp可以是tested here。
【问题讨论】:
-
我想你误解了为什么它有效。我相信它之所以起作用,是因为它抛出了异常,从而停止了 ExtJS 的触摸处理。使用
throw new Error();和dispatchEvent时,我得到了相同的行为,但是当我尝试/捕捉dispatchEvent时,它确实捕捉到了,但因为没有抛出任何东西,它会停止滚动。
标签: javascript iframe extjs touch extjs5