HTML无法原生生成二维码,需用qrcode.js在前端将文本转为canvas或svg并渲染;注意加载顺序、清空容器、容错率设为M或H以保障扫码成功率。

HTML 本身不提供原生二维码生成能力,<img> 标签只能加载静态资源,无法直接“动态生成”二维码——这不是限制,而是设计使然。真正要解决的,是「如何在前端实时把文本/URL转成二维码并渲染」。
用 qrcode.js 在浏览器里即时生成 DOM 元素
这是最轻量、兼容性最好、也最贴近“HTML 动态生成”直觉的方案:不依赖后端,纯前端 JS 将字符串转为 <canvas> 或 <svg>。
-
qrcode.js(官方库)默认输出<canvas>,支持width/height、errorCorrectionLevel(L/M/Q/H)等关键参数 - 若需高清缩放或打印,优先选
type: 'svg',避免 canvas 像素模糊 - 不要直接
innerHTML += <canvas>,每次生成前先清空容器,否则旧码残留 - 示例片段:
const qr = new QRCode(document.getElementById("qrcode"), { text: "https://example.com?id=123", width: 200, height: 200, type: "svg" });
遇到 Uncaught ReferenceError: QRCode is not defined 怎么办
说明脚本没加载成功或执行时机不对。不是代码写错,而是加载链路断了。
使用 PptxGenJS 和 Python 解析,将结构化的 HTML/CSS 幻灯片内容转换为原生、可编辑的 PowerPoint(.pptx)演示文稿。
- 确认
<script src="https://cdn.jsdelivr.net/npm/qrcode.js@1.5.3/qrcode.min.js"></script>在调用前已加载完成(建议放在<body>底部,或加defer) - 若用模块化环境(如 Vite、Webpack),应改用
import QRCode from 'qrcode.js',而非全局变量方式 - 动态插入 script 标签时,需监听
onload回调再初始化,不能紧随appendChild后立刻调用QRCode
需要服务端参与?其实只在特定场景才真有必要
前端生成完全能满足扫码跳转、分享链接等 95% 的需求。只有当出现以下情况时,才该考虑服务端生成:
立即学习“前端免费学习笔记(深入)”;
- 二维码内容含敏感信息(如 token、临时凭证),不希望明文暴露在前端 JS 中
- 需统一管理二维码生命周期(例如 5 分钟后失效),前端无法保证时间可信
- 要批量导出高清 PNG(如 2000×2000),Canvas 渲染性能差且内存占用高,服务端用
qrcodegen(Rust)或python-qrcode更稳 - 注意:服务端返回的仍是静态 URL(如
/api/qrcode?data=xxx),前端仍用<img src="...">加载——它“看起来”动态,实则是服务端动态响应
最容易被忽略的一点:二维码容错率设太低(errorCorrectionLevel: 'L')时,哪怕轻微污损或压缩,手机就扫不出。日常使用建议至少选 M;如果要打印在宣传册上,直接上 H。别为了省几个字节牺牲可用性。


















