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

如何从可编辑的CodePen Embed嵌入Pen中获取HTML代码

答案

完全可以提取开启可编辑属性的CodePen嵌入Pen中的HTML代码,无需绕开浏览器同源策略,按使用场景选择对应方案即可:

提取嵌入时的初始HTML代码

示例中属于data-prefill模式的可编辑嵌入,这类嵌入的初始源码并不存储在跨域iframe内,而是直接存放在当前页面.codepen容器的子节点中,直接读取本地DOM就能获取,完全不涉及跨域问题:

// 定位CodePen嵌入容器
const penContainer = document.querySelector('.codepen')
// 读取HTML区块内容,自动去除首尾多余空白
const initHtml = penContainer.querySelector('pre[data-lang="html"]').textContent.trim()

该方法仅能获取嵌入时写入的初始代码,无法拿到用户在可编辑区域修改后的内容。

提取用户编辑后的实时HTML代码

如果需要获取用户在嵌入编辑器中修改后的最新代码,要使用CodePen官方支持的postMessage通信通道。postMessage调用失败通常是三个原因:调用时机过早(iframe未完成加载就发消息)、未指定正确的目标源、消息格式不符合官方约定。正确实现代码如下:

// 等待页面资源加载完成,确保CodePen iframe渲染完毕后再执行
window.addEventListener('load', () => {
  const penIframe = document.querySelector('.codepen iframe')
  if (!penIframe) return

  // 监听iframe回传的消息
  window.addEventListener('message', (event) => {
    // 校验消息来源,过滤非目标源的无效消息
    if (event.origin !== 'https://codepen.io') return
    // 识别代码回传消息
    if (event.data?.type === 'currentCode') {
      const latestHtml = event.data.data.html
      // 此处即可拿到用户编辑后的最新HTML代码
      console.log(latestHtml)
    }
  })

  // 向iframe发送获取代码的请求,必须指定明确目标源,不能使用通配符*
  penIframe.contentWindow.postMessage(
    { type: 'getCurrentCode' },
    'https://codepen.io'
  )
})

注意事项

  • 浏览器同源策略拦截直接读取iframe内容是正常的安全机制,不要尝试绕开,官方提供的postMessage通道是唯一合规的交互方式
  • 如果作为第三方访客提取其他网站上嵌入的可编辑Pen代码,无法通过postMessage获取其他用户编辑后的内容(这类内容仅存储在访问者本地浏览器环境中),只能通过查看页面源码,读取.codepen容器内pre[data-lang="html"]节点的方式获取初始嵌入的代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 06:39:28