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

Javascript 在弹出窗口(ExtJS)上触发事件,javascript,events,extjs,popup,Javascript,Events,Extjs,Popup,我们目前正在开发一个广泛使用弹出窗口(*)的应用程序,并且在IE上遇到了一个问题(据报道,但我找不到任何解决方案) 问题是:我们的主窗口M打开一个弹出窗口p,并保留对它的引用。P然后在M中的对象上注册事件处理程序。当事件触发时,IE8弹出并显示以下错误消息: JScript object expected ext-all-debug.js (Line 1735, Char 17) Code: 0 这是EXTUTIL.Event.prototype中的fire函数。该代码在Firefox、Ope

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

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

JScript object expected
ext-all-debug.js (Line 1735, Char 17)
Code: 0
这是
EXTUTIL.Event.prototype
中的fire函数。该代码在Firefox、Opera和Chrome中运行良好

我提供了一个产生这种行为的方法

感谢您的帮助


(*)是的,这是一个很好的理由。不,外景窗口不是一个选项。

好吧,至少我得到了风滚草徽章。:-)

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

跨窗口使用Ext不安全。每个窗口都应该有自己的Ext实例,两个窗口之间的通信只能使用基本数据类型(字符串、数字、布尔值、日期)完成

这意味着您不能在另一个窗口中注册事件处理程序,因为这意味着将对象传递给另一个窗口

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

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