Vgbvcf's picture
download
raw
1.23 kB
/**
* Patch embedded HTML to display correctly inside an iframe.
*
* Injects CSS that ensures proper sizing and scrolling behavior
* when HTML content is rendered via srcDoc in an iframe.
*/
export function patchHtmlForIframe(html: string): string {
const iframeCss = `<style data-iframe-patch>
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
overflow-x: hidden;
overflow-y: auto;
}
/* Fix min-h-screen: in iframes 100vh is the iframe height, which is correct,
but ensure body actually fills it */
body { min-height: 100vh; }
</style>`;
// Insert right after <head> or at the start of the document
const headIdx = html.indexOf('<head>');
if (headIdx !== -1) {
const insertPos = headIdx + 6; // after <head>
return html.substring(0, insertPos) + '\n' + iframeCss + html.substring(insertPos);
}
const headWithAttrs = html.indexOf('<head ');
if (headWithAttrs !== -1) {
const closeAngle = html.indexOf('>', headWithAttrs);
if (closeAngle !== -1) {
const insertPos = closeAngle + 1;
return html.substring(0, insertPos) + '\n' + iframeCss + html.substring(insertPos);
}
}
// Fallback: prepend
return iframeCss + html;
}

Xet Storage Details

Size:
1.23 kB
·
Xet hash:
75d4fb8024d2d44c11dbec58282caee06e2fa90bc5f7ae5a3abd6f39eb610fb2

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.