@@ -400,6 +400,8 @@ function embed_script(
400400)
401401 api_base = string (cfg. embed_host, " /api/embed" )
402402 script_src = string (cfg. embed_host, " /embed/anythingllm-chat-widget.min.js" )
403+ resizer_parent_src = " https://cdn.jsdelivr.net/npm/iframe-resizer/js/iframeResizer.min.js"
404+ resizer_child_src = " https://cdn.jsdelivr.net/npm/iframe-resizer/js/iframeResizer.contentWindow.min.js"
403405 attrs = embed_attributes (options; custom= custom_attributes)
404406 iframe_styles = merge (default_iframe_style (), iframe_style)
405407
@@ -414,8 +416,27 @@ function embed_script(
414416 const embedId = "$(escape_js (embed_uuid)) ";
415417 const apiBase = "$(escape_js (api_base)) ";
416418 const src = "$(escape_js (script_src)) ";
417-
418- const injectEmbed = () => {
419+ const resizerParentSrc = "$(escape_js (resizer_parent_src)) ";
420+
421+ const ensureResizer = () => new Promise((resolve) => {
422+ if (window.iFrameResize) {
423+ resolve(window.iFrameResize);
424+ return;
425+ }
426+ const existing = document.querySelector('script[data-anythingllm-resizer-parent]');
427+ if (existing) {
428+ existing.addEventListener('load', () => resolve(window.iFrameResize));
429+ return;
430+ }
431+ const tag = document.createElement("script");
432+ tag.src = resizerParentSrc;
433+ tag.async = true;
434+ tag.dataset.anythingllmResizerParent = "true";
435+ tag.onload = () => resolve(window.iFrameResize);
436+ document.head.appendChild(tag);
437+ });
438+
439+ const injectEmbed = async () => {
419440 if (document.getElementById("anythingllm-embed-frame")) return;
420441
421442 const iframe = document.createElement("iframe");
@@ -434,6 +455,7 @@ function embed_script(
434455 </style>
435456 </head>
436457 <body>
458+ <script src="\$ {resizer_child_src}"><\\ /script>
437459 <script
438460 data-embed-id="\$ {embedId}"
439461 data-base-api-url="\$ {apiBase}"
@@ -444,6 +466,21 @@ function embed_script(
444466</html>`;
445467 iframe.srcdoc = html;
446468 document.body.appendChild(iframe);
469+
470+ try {
471+ const resizer = await ensureResizer();
472+ if (resizer) {
473+ resizer({
474+ checkOrigin: false,
475+ sizeHeight: true,
476+ sizeWidth: true,
477+ heightCalculationMethod: "lowestElement",
478+ widthCalculationMethod: "scroll",
479+ }, iframe);
480+ }
481+ } catch (e) {
482+ console.warn("iframe-resizer failed to load", e);
483+ }
447484 };
448485
449486 if (document.readyState === "complete" || document.readyState === "interactive") {
0 commit comments