in src/embed.ts [710:754]
private setIframe(isLoad: boolean, phasedRender?: boolean, isBootstrap?: boolean): void {
if (!this.iframe) {
const iframeContent = document.createElement("iframe");
const embedUrl = this.config.uniqueId ? addParamToUrl(this.config.embedUrl, 'uid', this.config.uniqueId) : this.config.embedUrl;
iframeContent.style.width = '100%';
iframeContent.style.height = '100%';
iframeContent.setAttribute("src", embedUrl);
iframeContent.setAttribute("scrolling", "no");
iframeContent.setAttribute("allowfullscreen", "true");
const node = this.element;
while (node.firstChild) {
node.removeChild(node.firstChild);
}
node.appendChild(iframeContent);
this.iframe = node.firstChild as HTMLIFrameElement;
}
if (isLoad) {
if (!isBootstrap) {
// Validate config if it's not a bootstrap case.
const errors = this.validate(this.config);
if (errors) {
throw errors;
}
}
this.iframe.addEventListener('load', () => {
this.iframeLoaded = true;
this.load(phasedRender);
}, false);
if (this.service.getNumberOfComponents() <= Embed.maxFrontLoadTimes) {
this.frontLoadHandler = () => {
this.frontLoadSendConfig(this.config);
};
// 'ready' event is fired by the embedded element (not by the iframe)
this.element.addEventListener('ready', this.frontLoadHandler, false);
}
} else {
this.iframe.addEventListener('load', () => this.createReport(this.createConfig), false);
}
}