提问人:Loc12342 提问时间:12/31/2022 更新时间:12/31/2022 访问量:737
如何在反应效果中可靠地获取 Iframe 内容正文更新
How to reliably get Iframe content body updates in react effect
问:
我正在通过 srcDoc 将 html 加载到 iframe 中,并使用 .sandbox="allow-same-origin"
我注意到即使显示内容也是空的。我设置了一个效果来监视该属性,但它始终未定义。frameRef.contentDocument.body.innerHTML
如何可靠地获取 iframe 内容的正文并能够观察其变化?
沙盒:https://codesandbox.io/s/bold-voice-ufp664
在控制台中,如果这样做,则会获得正确的输出。但是通过反应,它是不确定的。refNode.contentDocument.body.innerHTML
我尝试在特定属性(如 innerHTML 以及整个节点对象)上设置效果钩子,但无济于事。
我尝试使用常规参考,结果相同。
我希望能够获得 iframe 的主体并观察它的变化。
答:
0赞
Ori Drori
12/31/2022
#1
使用元素的事件来设置 when 帧准备就绪时的状态。onLoad
iframe
法典:
export default function App() {
const [frameElement, setFrameElement] = React.useState(null);
const [templateHtml, setTemplateHtml] = React.useState(null);
const handleFrameElement = React.useCallback(e => {
setFrameElement(e.target);
}, []);
React.useEffect(() => {
setTimeout(() => setTemplateHtml(html), 1200);
}, []);
React.useEffect(() => {
console.log(
"HOOK ",
frameElement?.contentDocument?.body?.innerHTML?.length
);
}, [frameElement]);
return (
<div>
{templateHtml && (
<iframe
srcDoc={templateHtml}
sandbox="allow-same-origin"
onLoad={handleFrameElement}
/>
)}
</div>
);
}
评论
innertHTML
innerHTML
frameElement?.contentDocument?.body?.innerHTML.length