关于IFrame共享父窗体ExtJs资源的问题

来源:互联网 发布:黑马程序员就业骗局 编辑:程序博客网 时间:2024/06/11 22:09

目的是:希望Iframe可以共享父窗体ExtJs资源,这样每个子窗口就无需下载和执行同样一份脚本,这样浏览器可以减少比较可观的资源开销。

 

我尝试了一个方法,但好像不行,以下是我的尝试:

1.在子窗体页面写下:Ext=top.Ext;

2.渲染的时候发现子页面的内容被渲染到父窗口去了。(ext-base-debug.js,ext-all-debug.js这两个库文件是由父窗口引入的,所以Ext.getBody()得到的实际上是top.window.document.body,所以就渲染到父窗口去了)

3.于是在子窗口的组件渲染时,直接渲染到子窗体自己的window.document上面,此时,子窗体确实可以显示在自己的Iframe中,但是仍然存在一些问题。(原因跟上面描述的差不多,extjs库本身在比较多的地方引用document对象,所以当一个组件创建在iframe里面,ext查找的时候可能在top.window.document里面找,找不到,于是错了)

4.在子功能js载入的时候增加一段代码top.currentDoc=document;(currentDoc表示Ext库的当前上下文窗口),然后修改extjs库所有引用document的地方,如果存在currentDoc就用currentDoc来替换document。本想用这个方法,在子窗口切换的时候更新top.currentDoc来实现每个窗口操作的时候,在它自己的窗体上操作,以避免从其他窗口或父窗口获取对象。改了之后还是存在一些比较难排查的问题,而且发现,extjs库改动的地方比较多。

实际上我认为Ext其实是有状态的,它不是简简单单的JS函数,在引入ext库的时候,它已经绑定了DOMdocument等),它被执行它的上下文绑定了(window)。

 

当然还有其他方法,可以把每个功能页面当做一个Panel而不是Iframe,但系统现有功能函数命名都是过程式的命名,没有Iframe的隔离,没有命名空间,命名会存在较大冲突的可能性,我们现在的代码组织方式,此方法暂时不考虑。

   

大家有什么方法?