Recommended for inline forms — Pure HTML, no third-party script. Renders even when ad blockers, corporate firewalls, or strict CSPs would block scripts.
<iframe id="orbit-form-inline-your-form-slug" src="https://orbitforms.ai/r/your-team-id/your-form-slug?embed=true" width="100%" height="600" frameborder="0" sandbox="allow-forms allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox allow-top-navigation" referrerpolicy="strict-origin-when-cross-origin" style="border:0;border-radius:12px"></iframe><script> (function() { var iframe = document.getElementById('orbit-form-inline-your-form-slug'); if (!iframe) return; var origin; try { origin = new URL(iframe.src).origin; } catch (e) { return; } window.addEventListener('message', function(e) { if (e.origin !== origin) return; var d; try { d = typeof e.data === 'string' ? JSON.parse(e.data) : e.data; } catch (_) { return; } if (!d) return; if (d.type === 'orbit-form-redirect') { var url = d.redirectUrl; if (typeof url === 'string' && url.length > 0 && url.length <= 2048) { var isHttp = url.indexOf('https://') === 0 || url.indexOf('http://') === 0; var isRelative = url.charAt(0) === '/' && url.charAt(1) !== '/'; if (isHttp || isRelative) window.location.assign(url); } return; } if (d.type === 'orbit-form-resize') { var h = Number(d.height); if (isFinite(h) && h >= 200 && h <= 5000) iframe.style.height = h + 'px'; return; } if (d.type === 'orbit-form-wheel') { var dy = Number(d.deltaY) || 0, dx = Number(d.deltaX) || 0; if (!isFinite(dy) || !isFinite(dx)) return; if (d.deltaMode === 1) { dy *= 16; dx *= 16; } else if (d.deltaMode === 2) { dy *= window.innerHeight; dx *= window.innerWidth; } dy = Math.max(-2000, Math.min(2000, dy)); dx = Math.max(-2000, Math.min(2000, dx)); window.scrollBy({ left: dx, top: dy, behavior: 'instant' }); } }); })();</script>
The small <script> does two things: auto-resizes the iframe to match the form’s content height, and forwards mouse-wheel events from inside the iframe so the host page keeps scrolling when the cursor is over a short form.Trade-offs: fixed height (no auto-resize), and no popup / slider / sidetab modes. Use the script embed below if you need those.
The script embed is required for popup, slider, sidetab, and auto-resize. For inline use it adds pre-fill, event callbacks, and comet_token forwarding.
Uses the native browser <dialog> element with inline JavaScript. No third-party script, so it can’t be blocked by ad blockers or strict CSPs. Universal browser support since 2022.
<!-- Use this button, or add class="orbit-popup-trigger-your-form-slug" to your own button/link --><button class="orbit-popup-trigger-your-form-slug">Open Form</button><!-- Paste this once on your page (anywhere in the body) --><dialog id="orbit-form-your-form-slug" style="border:0;border-radius:16px;padding:0;width:540px;max-width:95vw;height:720px;max-height:90dvh;background:#fff;overflow:hidden;margin:auto;inset:0"> <button type="button" onclick="this.closest('dialog').close()" ontouchstart="event.preventDefault();event.stopPropagation();this.closest('dialog').close()" ontouchend="event.preventDefault();event.stopPropagation()" aria-label="Close" style="position:absolute;top:12px;right:12px;width:36px;height:36px;border:0;border-radius:50%;background:rgba(0,0,0,0.06);cursor:pointer;z-index:20;font-size:20px;line-height:1;display:flex;align-items:center;justify-content:center;pointer-events:auto;touch-action:manipulation;-webkit-tap-highlight-color:transparent">×</button> <iframe src="https://orbitforms.ai/r/your-team-id/your-form-slug?embed=true" sandbox="allow-forms allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox allow-top-navigation" referrerpolicy="strict-origin-when-cross-origin" style="width:100%;height:100%;border:0;display:block"></iframe></dialog><style>#orbit-form-your-form-slug::backdrop{background:rgba(0,0,0,0.5);backdrop-filter:blur(4px)}</style><script> (function() { var dialog = document.getElementById('orbit-form-your-form-slug'); if (!dialog) return; document.addEventListener('click', function(e) { var trigger = e.target.closest && e.target.closest('.orbit-popup-trigger-your-form-slug'); if (!trigger) return; e.preventDefault(); if (dialog.open) return; dialog.showModal(); }); dialog.addEventListener('click', function(e) { if (e.target === dialog) dialog.close(); }); })();</script>
The native <dialog> element handles the backdrop dimming, escape-to-close, focus trap, and ARIA roles automatically. Add the generated trigger class to as many buttons as you want — they’ll all open the same form. Use a unique class per form if you have multiple popup embeds on the same page.Adjust the width and height inline styles on the <dialog> to fit your form.
Use the embed script if you want auto-resize, event callbacks, or slider/sidetab/popover modes. This loads embed.js from orbitforms.ai, which can be blocked by aggressive ad blockers or corporate firewalls — use Option 1 above for maximum reliability.
Add the CSS class orbit-popup-trigger to every button that should open the popup. You can have as many buttons as you want across the page — they’ll all trigger the same popup.
3
Publish your site
Publish or deploy your site. The popup will only work on the live/published site — most website builders don’t execute custom JavaScript in their preview or designer mode.
Why use a class instead of an ID? HTML IDs must be unique — only one element per page can have a given ID. If you have multiple “Get Started” buttons, document.getElementById only finds the first one. Using a class with querySelectorAll attaches the popup trigger to every matching button.
Important:OrbitForms.popup() does not open the popup immediately. It creates an instance and returns an object with open(), close(), and toggle() methods. You must call .open() to show the popup.
The script-based popup automatically fits the form content and never overflows the viewport. On mobile, it goes full-screen. You can control the max width:
Open a scheduling page in a popup modal. Use the native dialog + iframe option for maximum reliability.
<!-- Use this button, or add class="orbit-schedule-popup-trigger-your-schedule-slug" to your own button/link --><button class="orbit-schedule-popup-trigger-your-schedule-slug">Book a Meeting</button><!-- Paste this once on your page (anywhere in the body) --><dialog id="orbit-schedule-your-schedule-slug" style="border:0;border-radius:16px;padding:0;width:700px;max-width:95vw;height:720px;max-height:90dvh;background:#fff;overflow:hidden;margin:auto;inset:0"> <button type="button" onclick="this.closest('dialog').close()" ontouchstart="event.preventDefault();event.stopPropagation();this.closest('dialog').close()" ontouchend="event.preventDefault();event.stopPropagation()" aria-label="Close" style="position:absolute;top:12px;right:12px;width:36px;height:36px;border:0;border-radius:50%;background:rgba(0,0,0,0.06);cursor:pointer;z-index:20;font-size:20px;line-height:1;display:flex;align-items:center;justify-content:center;pointer-events:auto;touch-action:manipulation;-webkit-tap-highlight-color:transparent">×</button> <iframe src="https://orbitforms.ai/s/your-team-id/your-schedule-slug?embed=true" sandbox="allow-forms allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox allow-top-navigation" referrerpolicy="strict-origin-when-cross-origin" style="width:100%;height:100%;border:0;display:block"></iframe></dialog><style>#orbit-schedule-your-schedule-slug::backdrop{background:rgba(0,0,0,0.5);backdrop-filter:blur(4px)}</style><script> (function() { var dialog = document.getElementById('orbit-schedule-your-schedule-slug'); if (!dialog) return; document.addEventListener('click', function(e) { var trigger = e.target.closest && e.target.closest('.orbit-schedule-popup-trigger-your-schedule-slug'); if (!trigger) return; e.preventDefault(); if (dialog.open) return; dialog.showModal(); }); dialog.addEventListener('click', function(e) { if (e.target === dialog) dialog.close(); }); })();</script>
Add the generated trigger class to any button that should open the scheduling popup.