@@ -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,28 @@ 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+ const resizerChildSrc = "$(escape_js (resizer_child_src)) ";
421+
422+ const ensureResizer = () => new Promise((resolve) => {
423+ if (window.iFrameResize) {
424+ resolve(window.iFrameResize);
425+ return;
426+ }
427+ const existing = document.querySelector('script[data-anythingllm-resizer-parent]');
428+ if (existing) {
429+ existing.addEventListener('load', () => resolve(window.iFrameResize));
430+ return;
431+ }
432+ const tag = document.createElement("script");
433+ tag.src = resizerParentSrc;
434+ tag.async = true;
435+ tag.dataset.anythingllmResizerParent = "true";
436+ tag.onload = () => resolve(window.iFrameResize);
437+ document.head.appendChild(tag);
438+ });
439+
440+ const injectEmbed = async () => {
419441 if (document.getElementById("anythingllm-embed-frame")) return;
420442
421443 const iframe = document.createElement("iframe");
@@ -434,6 +456,7 @@ function embed_script(
434456 </style>
435457 </head>
436458 <body>
459+ <script src="\$ {resizerChildSrc}"><\\ /script>
437460 <script
438461 data-embed-id="\$ {embedId}"
439462 data-base-api-url="\$ {apiBase}"
@@ -444,6 +467,21 @@ function embed_script(
444467</html>`;
445468 iframe.srcdoc = html;
446469 document.body.appendChild(iframe);
470+
471+ try {
472+ const resizer = await ensureResizer();
473+ if (resizer) {
474+ resizer({
475+ checkOrigin: false,
476+ sizeHeight: true,
477+ sizeWidth: true,
478+ heightCalculationMethod: "lowestElement",
479+ widthCalculationMethod: "scroll",
480+ }, iframe);
481+ }
482+ } catch (e) {
483+ console.warn("iframe-resizer failed to load", e);
484+ }
447485 };
448486
449487 if (document.readyState === "complete" || document.readyState === "interactive") {
0 commit comments