花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 10|回复: 2

基于 DOMParse API 的 HTML 预览演示

[复制链接]
  • TA的每日心情
    奋斗
    2026-6-7 09:06
  • 签到天数: 1838 天

    [LV.Master]伴坛终老

    3245

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2026-6-7 19:23 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    <button type="button" id="btnTest">点击我预览效果</button>
    
    <script>
    
    function preView (code) {
        // HTML代码转DOM实体
        const doc = new DOMParser().parseFromString(code, 'text/html');
    
        // 添加meta标签(用于定义网页字符集)
        const metas = doc.getElementsByTagName('meta');
        let hasCharset = false; // 字符集meta未定义
        // 遍历meta标签
        for (let j = 0; j < metas.length; j ++) {
            if (metas[j].hasAttribute('charset')) {
                hasCharset = true; // 字符集已定义
                break;
            }
        }
        // 若未定义字符集则创建meta标签
        if (!hasCharset) {
            const meta = document.createElement('meta');
            meta.setAttribute('charset', 'utf-8');
            doc.head.prepend(meta);
        }
    
        // 若不存在title标签创建之
        if (!doc.title) {
            const title = document.createElement('title');
            title.textContent = '预览';
            doc.head.appendChild(title)
        }
    
        // 获取完整HTML代码文本
        const content = doc.documentElement.outerHTML;
    
        // 预览
        const codeBlob = new Blob([content], { type: 'text/html' });
        const tmpUrl = window.URL.createObjectURL(codeBlob);
        window.open(tmpUrl, '_blank');
    }
        // 故意令代码结构不完整
        let htmlCode = `<body>\n<style>\nh1 { color: red; };\n</style>\n<h1>Hello World!</h1>\n</body>`;
        btnTest.onclick = () => preView(htmlCode);
    
    </script>
    
  • TA的每日心情
    奋斗
    2026-6-7 09:06
  • 签到天数: 1838 天

    [LV.Master]伴坛终老

    3245

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2026-6-7 19:30 | 显示全部楼层
    本帖可以视为 浅谈待预览HTML代码的包装 的补充:提供一个使用 DOMParse API 的待预览 HTML 代码的函数和函数应用示例。


    核心在函数 preView(code),参数 code 是纯文本 html 代码字串。


    这个包装待预览html代码的方案,包装的工作不仅针对 Web 结构的完整性,还特别处理 meta 标签字符集声明和 title 标签,前者针对页面显示避免乱码、后者针对页面(标签页)的标题显示。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2026-6-7 09:06
  • 签到天数: 1838 天

    [LV.Master]伴坛终老

    3245

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2026-6-7 19:38 | 显示全部楼层
    在最终的预览页面,可以右击查看原始代码,会发现核心三元素是齐备的,还有我们添加的 meta 和 title 标签(不论 htmlCode 变量里的文本是否包含这些)
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2026-6-7 21:36 , Processed in 0.060033 second(s), 24 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表