我正在开发一个跨域的应用程序,需要将内容加载到iframe中。问题是我们不知道我们正在接收的内容的大小,我希望能够动态地改变iframe的高度以适应相应的情况。然而,我找到的所有解决方案都是以JavaScript为中心的,但我正在使用TypeScript/Angular4。
我尝试过通过iframe上的(load)访问DOM元素,但它没有返回iframe内容,而是初始的iframe大小(在加载内容之前)。
感谢您的帮助,谢谢。
发布于 2018-04-09 18:29:47
您可以使用以下指令来实现这一点。
import { Directive , ElementRef , OnInit , Renderer } from '@angular/core';
@Directive({
selector: '[iframeAutoHeight]'
})
export class IframeAutoHeightDirective implements OnInit {
private el: any;
private renderer: Renderer;
private prevHeight: number;
private sameCount: number;
constructor(_elementRef: ElementRef, _renderer: Renderer) {
this.el = _elementRef.nativeElement;
this.renderer = _renderer;
}
ngOnInit() {
const self = this;
if (this.el.tagName === 'IFRAME') {
this.renderer.listen(this.el, 'load', () => {
self.prevHeight = 0;
self.sameCount = 0;
setTimeout(() => {
self.setHeight();
}, 50);
});
}
}
setHeight() {
const self = this;
if (this.el.contentWindow.document.body.scrollHeight !== this.prevHeight) {
this.sameCount = 0;
this.prevHeight = this.el.contentWindow.document.body.scrollHeight;
this.renderer.setElementStyle(
self.el,
'height',
this.el.contentWindow.document.body.scrollHeight + 'px'
);
setTimeout(() => {
self.setHeight();
}, 50);
} else {
this.sameCount++;
if (this.sameCount < 2) {
setTimeout(() => {
self.setHeight();
}, 50);
}
}
}
}发布于 2017-04-19 23:07:57
我有一个类似的应用程序。我刚刚将iframe height属性设置为100%,并将滚动设置为auto。然后在你的外部应用中,只需将html和body设置为100%的高度,并将body overflow-y设置为隐藏即可。
https://stackoverflow.com/questions/43477275
复制相似问题