需求:
有时候Window 内容过多无法显示,奈何只能限制与iframe 中
解决思路:
1、先让iframe 先全屏再让window 全屏
兼容缺陷:
支持到Ext3.4.1
firefox chrome 需要修改 iframe 所有父节点 postion 的positon 样式,有可能导致父标签样式显示异常
优点:
完美支持IE
代码如下
Ext.ns('Ext.ui'); /* * @config src // iframe url @config firameId // iframe ID @public method * {htmlElement getIframe(void)} */ Ext.ui.BreakWindow = Ext.extend(Ext.Window, { initComponent : function() { this.on("hide", this.restoreMax, this); Ext.ui.BreakWindow.superclass.initComponent.apply(this, arguments); }, maximized : true, restoreMax : function() { if (this.iframeEl) { var el = this.iframeEl; var config = this.restoreConfig; if (config) { this.restoreRelativeParentNode(); el.applyStyles({ position : config.position, "z-index" : config['z-index'] }); el.setSize(config.width, config.height); } } }, staticRelativeParentNode : function() { var pwin = window.parent; var Ext = pwin.Ext; if (this.isLowIE()) { if (this.restoreConfig.parentNode != Ext.getBody().dom) { Ext.getBody().dom.appendChild(this.iframeEl.dom); } return; } var start = this.iframeEl.dom.parentNode; var rNodes = []; this.rNodes = rNodes; var el; while (start) { el = Ext.get(start); if (el.getStyle("position") != "static") { rNodes.push({ id : el.id, position : el.getStyle("position") }); el.setStyle("position", "static"); } start = start.parentNode; if (start.tagName == 'BODY') { break; } } }, restoreRelativeParentNode : function() { var pwin = window.parent; var Ext = pwin.Ext; if (this.isLowIE()) { if (this.restoreConfig.parentNode != Ext.getBody().dom) { this.restoreConfig.parentNode.appendChild(this.iframeEl.dom); } return; } var rNodes = this.rNodes; for (var i = 0; i < rNodes.length; i++) { Ext.get(rNodes[i].id).setStyle("position", rNodes[i].position); } // console.dir(parent.document.getElementsByTagName("iframe")); }, isLowIE : function() { return Ext.isIE && !Ext.isIE10; }, show : function() { var superShow = Ext.ui.BreakWindow.superclass.show; var win = window; var me = this; if (win.parent) { var pwin = window.parent; var iframes = pwin.document.getElementsByTagName("iframe"); var iframe for (var i = 0; i < iframes.length; i++) { if (iframes[i].contentWindow.location.href === win.location.href) { iframe = iframes[i]; } } if (iframe) { var D = pwin.Ext.lib.Dom; var w = D.getViewWidth(), h = D.getViewHeight(); var el = pwin.Ext.get(iframe); this.iframeEl = el; this.restoreConfig = { width : el.getWidth(), height : el.getHeight(), position : el.getStyle("position"), "z-index" : el.getStyle("z-index"), parentNode : el.dom.parentNode }; this.staticRelativeParentNode(); el.applyStyles({ position : 'absolute', top : 0, left : 0, "background-color" : 'white', "z-index" : 2000 }); el.setSize(w, h); superShow.apply(this, arguments); } } else { superShow.apply(this, arguments); } } }); Ext.reg('breakwindow', Ext.ui.BreakWindow);
相关推荐
在ExtJs 4.2版本中,`Window`组件是一个非常基础且重要的UI组件,它为开发者提供了一个灵活的弹出窗口解决方案。通过合理的配置,可以轻松实现各种弹出窗体的需求。 ### 配置属性详解 #### plain - **默认值**:`...
这可能使用`Ext.window.Window`或`Ext.LoadMask`来实现加载效果,同时配合`Ext.Component`或`IFrame`加载图片资源。 此外,为了优化用户体验,项目可能还包含了进度条显示文件上传进度,这通常使用`Ext.ProgressBar...
+Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, ...
+Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -> Target="Self", Target="_parent" -> Target="Parent"。 -MenuButton, ...
- 弹出对话框供用户继续添加子菜单或进行其他操作。 ##### 3.2 绑定与更新 - **步骤4:** 新增另一个菜单项,并将其父菜单设置为之前添加的菜单项。 - **步骤5:** 点击“保存并关闭”按钮,将执行以下操作: - ...
如果B页面上执行了特定的操作(比如数据保存等),然后希望通过JavaScript关闭B页面并刷新A页面,通常情况下,如果直接使用`window.opener.location.reload()`方法,会导致浏览器弹出提示,询问用户是否要重新加载...
Open_Browser_Window+ 操作弹出式窗口升级版 StyleApplier 表格的鼠标触发效果 checkform 表单验证插件 Realplayer 嵌入网页Real播放器插件 BannerImageBuilder 创建多图片随机显示 CloseCW 方便的插入一个关闭当前...
一个弹出日历表格,用以确保输入的日历是按照特定的格式进行输入的,主要特色包括:日历链接,按照需要的方式设定日历的格式,按照需要可以在日期项目间增加分隔符等等功能 MX95982_shortcutIconOB_v1 插入.icon图标...