标签:contentDocument oIframe null 动态创建 HTML iframe document
问题描述
在使用 iframe
解析一个 HTML
时, 通过 document.createElement('iframe')
创建 iframe
, 并设置 srcdoc
后, 发现 contentDocument = null
。
复现代码如下:
const oIframe = document.createElement('iframe')
oIframe.srcdoc = `<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p>我是段落</p>
</body>
</html>`
oIframe.style.display = 'none'
const oP = oIframe.contentDocument.querySelector('p')
console.log(oP.innerText)
上面代码会报错:
VM4928:17 Uncaught TypeError: Cannot read properties of null (reading 'querySelector')
at <anonymous>:17:38
意思是: iframe 的 contentDocument 为 null。
这是因为在 在 javascript
中创建的 iframe
的 srcdoc
不会触发 HTML
解析器,直到元素被插入到文档中。 然后更新 HTML
,调用HTML解析器并按预期处理属性。
解决方法
将创建好的 iframe
插入到 文档中, 并在加载成功后, 再进行文档操作。
const oIframe = document.createElement('iframe')
oIframe.srcdoc = `<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p>我是段落</p>
</body>
</html>`
oIframe.style.display = 'none'
document.body.appendChild(oIframe)
oIframe.onload = () => {
const oP = oIframe.contentDocument.querySelector('p')
console.log(oP.innerText)
// 使用完毕后移除
document.body.removeChild(oIframe)
}
可以正常输出 我是段落
。
参考
Creating an iframe with given HTML dynamically
标签:contentDocument,oIframe,null,动态创建,HTML,iframe,document 来源: https://www.cnblogs.com/taohuaya/p/16309876.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。