You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

同域iframe的contentDocument.body.innerHTML代码访问为空该如何解决

核心原因

你遇到的不是浏览器的跨域阻止逻辑,是代码执行时机早于iframe加载完成时间导致的:

  • 页面解析到内嵌script标签时会直接执行代码,此时iframe刚完成DOM创建,仅发出了资源请求,内部页面还没有加载、渲染完成,contentDocument.body是空的初始状态,所以拿到空值
  • 你打开开发者工具查看属性时,距离页面加载已经过了一段时间,iframe已经完成了内部页面的加载,所以能看到完整的innerHTML内容
修复方案

调整代码逻辑,监听iframe的load事件,等iframe内部页面加载完成后再读取内容即可,修改后的script部分代码如下:

// 先获取iframe元素
const iframe = document.getElementById('iframeID');
// 监听加载完成事件
iframe.addEventListener('load', () => {
  const pageSource = iframe.contentDocument.body.innerHTML;
  document.getElementById("sourceOut").innerHTML = pageSource;
  console.log(pageSource);
});

额外说明:

  • 如果后续你替换为代理页面抓取外部站点源码,只要保证代理页面和父页面同域,以上逻辑可以正常执行
  • 如果出现跨域场景,即使加了load事件也无法读取iframe内容,符合浏览器同源策略限制

内容的提问来源于stack exchange,提问作者Adam Winter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:18:04