在弹出窗口中触发事件(ExtJS)

时间:2010-08-20 10:41:53

标签: javascript events extjs popup

我们目前正在开发一个广泛使用弹出窗口(*)并在IE上遇到问题的应用程序(已报告before,但我找不到任何解决方案。)

问题是:我们的主窗口 M 打开一个弹出窗口 P 并保留对它的引用。 P 然后在 M 中的对象上注册事件处理程序。当事件触发时,IE8会发出以下错误消息:

JScript object expected
ext-all-debug.js (Line 1735, Char 17)
Code: 0

这是EXTUTIL.Event.prototype中的火功能。该代码在Firefox,Opera和Chrome中运行良好。

我提供了一个产生此行为的minimal example

感谢任何帮助。

(*)是的,这是有充分理由的。不,Ext.Window不是一个选择。

1 个答案:

答案 0 :(得分:2)

嗯,至少我拿到了风滚草徽章。 : - )

事实证明,你无法使用ExtJS在IE浏览器窗口中触发事件。来自ExtJS社区支持团队的Condor说:

  

Ext在Windows上使用是不安全的。每个窗口都应该有自己的Ext实例,两个窗口之间的通信只能使用原始数据类型(String,Number,Boolean,Date)来完成。

     

这意味着您无法在其他窗口中注册事件处理程序,因为这意味着将对象传递到另一个窗口。

事实证明,这并不完全准确(至少在IE7及以上版本中)。您可以跨浏览器窗口引用对象。你无法做的是使用Ext事件系统。

我使用的解决方法是在 P 中注册事件处理程序,而不是在 P 中使用 M 调用方法,然后触发事件“本地”。当然,它不是很优雅或灵活,但它在所有浏览器中都能很好地工作。此外,我认为保持跨窗口通信简单明确是一种好习惯。如果您使用事件处理程序,则必须仔细跟踪发生的事件,例如,您需要确保在窗口关闭之前取消注册所有事件处理程序。