我试图摆脱 IE8 中的内存泄漏,这是由 iframe 导航期间事件处理程序和 DOM 元素之间的引用循环引起的。我无法修改页面上的其他脚本。
所以想法是遍历 DOM 和 window 对象并取消所有字段以确保没有 DOM 元素引用事件处理程序。
现在的问题是我需要在所有其他卸载处理程序运行后执行此操作,因为其他处理程序可能取决于我要取消的字段。
我尝试在父窗口中的某处导航之前存储文档对象,然后在 iframe 中的导航完成(onload 事件)后,对存储的文档对象运行清理。但是,显然,您不能这样做,因为在旧页面被卸载后访问该文档变得非法(访问错误)。
我尝试的另一种方法是找到添加窗口卸载处理程序的方法,这将保证被称为最后一个,但是,到目前为止我还没有成功。为了实现这一点,我尝试调用卸载事件的所有处理程序,清理它们,然后运行我的代码,但我没有找到手动触发卸载事件的方法。
有任何想法吗?不幸的是,页面使用 jQuery 和 Microsoft Ajax,它们有自己的卸载处理程序。特别是,我的无效化破坏了 MS Ajax 卸载处理程序,因为它删除了所有库名称空间。