`
faylai
  • 浏览: 79236 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

让Ext 的Window 弹出iframe

    博客分类:
  • js
阅读更多

需求:

 

有时候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);

 

分享到:
评论

相关推荐

    ExtJs4.2 Window常用方法

    在ExtJs 4.2版本中,`Window`组件是一个非常基础且重要的UI组件,它为开发者提供了一个灵活的弹出窗口解决方案。通过合理的配置,可以轻松实现各种弹出窗体的需求。 ### 配置属性详解 #### plain - **默认值**:`...

    Ext圖片上傳、刪除、查看.net源碼

    这可能使用`Ext.window.Window`或`Ext.LoadMask`来实现加载效果,同时配合`Ext.Component`或`IFrame`加载图片资源。 此外,为了优化用户体验,项目可能还包含了进度条显示文件上传进度,这通常使用`Ext.ProgressBar...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    +Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -&gt; Target="Self", Target="_parent" -&gt; Target="Parent"。 -MenuButton, ...

    ExtAspNet_v2.3.2_dll

    +Button, Window等控件弹出位置属性的变化。 -Window的Target属性由字符串类型变为枚举类型,注意更新以前的代码:Target="_self" -&gt; Target="Self", Target="_parent" -&gt; Target="Parent"。 -MenuButton, ...

    EXTASPNET 总结

    - 弹出对话框供用户继续添加子菜单或进行其他操作。 ##### 3.2 绑定与更新 - **步骤4:** 新增另一个菜单项,并将其父菜单设置为之前添加的菜单项。 - **步骤5:** 点击“保存并关闭”按钮,将执行以下操作: - ...

    JS实现刷新父页面不弹出提示框的方法

    如果B页面上执行了特定的操作(比如数据保存等),然后希望通过JavaScript关闭B页面并刷新A页面,通常情况下,如果直接使用`window.opener.location.reload()`方法,会导致浏览器弹出提示,询问用户是否要重新加载...

    70款经典Dreamweaver插件

    Open_Browser_Window+ 操作弹出式窗口升级版 StyleApplier 表格的鼠标触发效果 checkform 表单验证插件 Realplayer 嵌入网页Real播放器插件 BannerImageBuilder 创建多图片随机显示 CloseCW 方便的插入一个关闭当前...

    Dreamweaver 插件集

    一个弹出日历表格,用以确保输入的日历是按照特定的格式进行输入的,主要特色包括:日历链接,按照需要的方式设定日历的格式,按照需要可以在日期项目间增加分隔符等等功能 MX95982_shortcutIconOB_v1 插入.icon图标...

Global site tag (gtag.js) - Google Analytics