Skip to content

Instantly share code, notes, and snippets.

@drakkein
Last active July 17, 2023 08:16
Show Gist options
  • Save drakkein/b8be66296c09e7989ec62d66d65002f6 to your computer and use it in GitHub Desktop.
Save drakkein/b8be66296c09e7989ec62d66d65002f6 to your computer and use it in GitHub Desktop.
iframe resizer directive for Angular 4 (No CORS)
import { Directive, ElementRef, OnDestroy, OnInit, Renderer2 } from '@angular/core';
@Directive({
selector: '[iframeResize]',
})
export class IframeResizeDirective implements OnInit, OnDestroy {
private listener: () => void;
private observer: MutationObserver;
get element() {
return this.elementRef.nativeElement;
}
get contentHeight() {
return this.element.contentDocument.body.scrollHeight;
}
constructor(private elementRef: ElementRef, private renderer: Renderer2) {}
ngOnInit() {
this.listener = this.renderer.listen(this.element, 'load', () => {
this.setFrameHeight(this.contentHeight);
this.observer = new MutationObserver((mutations) => {
this.setFrameHeight(this.contentHeight);
});
this.observer.observe(this.element.contentDocument.body, {
attributes: true,
childList: true,
characterData: true,
subtree: true
});
});
}
setFrameHeight(height: number) {
this.renderer.setStyle(
this.element,
'height',
`${height}px`
);
}
ngOnDestroy() {
this.observer.disconnect();
this.listener();
}
}
@AbhiBhutani
Copy link

Thanks man for sharing this directive.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment