Ext 윈도우에서 iframe 띄우기
때때로 윈도우 내용이 너무 많아서 표시할 수 없습니다. 어떻게 iframe에서만 제한할 수 있습니까?
해결 방법:
1. 먼저 iframe에게 전체 화면을 보여주고 윈도우 전체 화면을
호환 결함:
Ext3.4.1까지 지원
firefoxchrome는 iframe의 모든 부모 노드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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Application Development in WebOSDevelop applications in WebOS Recognize the abstract class Application The operating system accepts classes that impleme...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.