怎样在博客中添加HTML在线运行功能

小辰吖_3053

小辰吖_3053

2026-09-10

538人浏览

原创

最轻量的 html 实时预览方案是 window.open() + document.write(),需注意 document.close()、html 转义、安全隔离、移动端兼容及多代码块唯一查找,禁用 data:text/html。

怎样在博客中添加html在线运行功能

直接用 window.open() + document.write() 最轻量

不需要后端、不依赖第三方服务,几行 JS 就能让读者点一下就看到 HTML 效果。核心逻辑就是:取到代码字符串 → 新开空白窗口 → 用 document.write() 写入并关闭文档流。

常见错误现象:document.write() 在页面加载完成后调用会清空整个页面;或没调用 document.close() 导致页面一直显示“正在加载”;还有人忘了对 HTML 特殊字符做转义,比如 被当成标签解析,直接崩掉预览。

实操建议:

html-deploy
html-deploy

使用 htmlcode.fun 将 HTML 内容或文件部署到网页,适用于用户要求“部署到网页”“托管此 HTML”“生成此前端...的实时链接”等场景。

下载
  • 从 <textarea id="runcode"></textarea> 里取内容,先用正则还原 HTML 实体:code.replace(/, '/g, '>').replace(/&/g, '&')
  • 调用 window.open('', '_blank') 后,立刻执行 newwin.document.open('text/html', 'replace'),否则在某些浏览器里会写不进内容
  • 必须紧接 newwin.document.write(code) 和 newwin.document.close(),缺一不可
  • 加一句 newwin.opener = null,避免新窗口能通过 window.opener 反向控制原页面(安全 & 防止刷新后报错)

多个代码块共存时,别用全局 id 硬编码

博客里常有多个 <textarea></textarea>,如果统一用 document.getElementById('runcode'),永远只取第一个。更糟的是,用户复制粘贴多段示例后,所有“运行”按钮都指向同一个 ID,点哪个都跑第一个。

使用场景:一篇讲表单验证的博客,分别有“基础 input”“带 pattern 的 input”“完整 form 提交”三段可运行代码。

实操建议:

  • 每个代码块用唯一 class 包裹,比如 <div class="runnable-block"> <li>“运行”按钮放在同一容器内,用相对查找:<code>btn.closest('.runnable-block').querySelector('textarea').value
  • 避免用 onclick="runCode()" 写在 HTML 里,改用事件委托绑定,防止动态插入的代码块失效
  • 如果用 jQuery,优先选 $(btn).closest('.runnable-block').find('textarea').val(),比 $('#runcode') 可靠得多
  • Chrome/Firefox 对 data:text/html, 的限制越来越严

    有人图省事用 window.open('data:text/html,' + encodeURIComponent(code)),看起来简洁,但 2025 年起 Chrome 128+ 和 Firefox 125+ 默认拦截这类 data URL 弹窗,尤其含 script 标签时,控制台直接报 Not allowed to navigate top frame to data URL。

    性能 / 兼容性影响:该方式在 Safari 下基本可用,但无法调试(没有 network 请求、无 console 上下文),且不支持跨域资源(如 CDN 加载的 JS 库)。

    实操建议:

    • 彻底放弃 data:text/html 方案,回归 window.open() + document.write() 组合
    • 如果真要免弹窗,可把预览区域嵌在当前页的 <iframe></iframe> 里,但注意同源策略——非同源 iframe 无法读取其 contentDocument,调试困难
    • 测试时务必在 Chrome 最新版和 Firefox Nightly 下验证,别只看本地开发环境

    别忽略移动端点击延迟和 iframe 滚动问题

    博客读者大量来自手机,而 window.open() 在 iOS Safari 和部分安卓浏览器中会被拦截为弹窗广告,直接静默失败;就算成功,新开窗口在小屏上体验极差——没有返回按钮、不能滑动、字号错乱。

    实操建议:

    • 移动端优先用内联 <iframe sandbox="allow-scripts"></iframe> 替代新窗口,设置固定宽高 + scrolling="auto"
    • 给 iframe 加 loading="lazy" 避免首屏卡顿,但首次点击“运行”时需手动 iframe.srcdoc = code(注意 Safari 16.4+ 才完全支持 srcdoc)
    • 监听 touchstart 而非 click,解决 iOS 300ms 延迟;同时加 cursor: pointer 和 user-select: none 防误操作
    • 代码块本身加 tabindex="0",让键盘用户也能触发,这点几乎没人做,但 WCAG 合规要求它

    最麻烦的其实是 HTML 字符转义和上下文隔离——你以为只是把字符串塞进去,其实是在不同文档流、不同执行时机、不同安全策略之间反复横跳。稍不注意,一段本该跑通的 demo 就在读者手机上白屏,还查不出原因。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关文章

HTML速学教程(入门课程)
HTML速学教程(入门课程)

HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
html版权符号
html版权符号

html版权符号是“©”,可以在html源文件中直接输入或者从word中复制粘贴过来,php中文网还为大家带来html的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

5395

7

html在线编辑器
html在线编辑器

html在线编辑器是用于在线编辑的工具,编辑的内容是基于HTML的文档。它经常被应用于留言板留言、论坛发贴、Blog编写日志或等需要用户输入普通HTML的地方,是Web应用的常用模块之一。php中文网为大家带来了html在线编辑器的相关教程、以及相关文章等内容,供大家免费下载使用。

2023.06.21

3112

4

html网页制作
html网页制作

html网页制作是指使用超文本标记语言来设计和创建网页的过程,html是一种标记语言,它使用标记来描述文档结构和语义,并定义了网页中的各种元素和内容的呈现方式。本专题为大家提供html网页制作的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.31

2770

5

html空格
html空格

html空格是一种用于在网页中添加间隔和对齐文本的特殊字符,被用于在网页中插入额外的空间,以改变元素之间的排列和对齐方式。本专题为大家提供html空格的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.01

2799

5

html是什么
html是什么

HTML是一种标准标记语言,用于创建和呈现网页的结构和内容,是互联网发展的基石,为网页开发提供了丰富的功能和灵活性。本专题为大家提供html相关的各种文章、以及下载和课程。

2023.08.11

4679

6

html字体大小怎么设置
html字体大小怎么设置

在网页设计中,字体大小的选择是至关重要的。合理的字体大小不仅可以提升网页的可读性,还能够影响用户对网页整体布局的感知。php中文网将介绍一些常用的方法和技巧,帮助您在HTML中设置合适的字体大小。

2023.08.11

2741

3

html转txt
html转txt

html转txt的方法有使用文本编辑器、使用在线转换工具和使用Python编程。本专题为大家提供html转txt相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

2549

3

html文本框代码怎么写
html文本框代码怎么写

html文本框代码:1、单行文本框【<input type="text" style="height:..;width:..;" />】;2、多行文本框【textarea style=";height:;"></textare】。

2023.09.01

2288

6

HTML嵌入CSS样式的方法
HTML嵌入CSS样式的方法

HTML嵌入CSS样式的方法有内联样式、内部样式表和外部样式表。本专题为大家提供CSS样式相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.20

2288

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
千锋PHP-HTML入门及实战视频教程
千锋PHP-HTML入门及实战视频教程

共18课时 | 3.8万人学习

GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习