create an iframe component and pass the iframe src (in my usecase it is a local html doc);
import React, { useRef, useEffect, useState } from 'react';
import { readTextFile, BaseDirectory } from '@tauri-apps/api/fs';
export default function CustomIframe(props) {
const [htmlString, setHtmlString] = useState('');
const [isLoading, setLoading] = useState(true);
const iframeRef = useRef(null);
useEffect(() => {
const fetchData = async () => {
try {
const result = await readTextFile(props.src, { dir: BaseDirectory.AppData });
setHtmlString(result);
setLoading(false);
} catch (error) {
setLoading(false);
props.onError();
}
};
fetchData();
}, [props.src]);
useEffect(() => {
if (iframeRef.current) {
const iframeDocument = iframeRef.current.contentDocument;
iframeDocument.open();
iframeDocument.write(htmlString);
iframeDocument.close();
}
}, [htmlString]);
if (isLoading) {
return '';
} else {
return (
<iframe
id={`frame-${props.id}`}
className='advanced-slide'
title={`Advanced Slide ${props.id}`}
ref={iframeRef}
sandbox="allow-scripts allow-same-origin"
src={`data:text/html;charset=utf-8,${encodeURIComponent(htmlString)}`}
/>
);
}
}