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

目的是 : 希望 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 库的时候,它已经绑定了 DOM document 等),它被执行它的上下文绑定了( window )。

 

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

   

大家有什么方法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值