最稳方案是用 qrcode.js 生成指向页面的 URL 二维码,而非 HTML 源码;报 QRCode is not defined 需确保脚本在 DOM 后加载或加 defer;扫码白屏因 file:// 协议或相对路径导致,须用完整 HTTPS 地址和绝对路径;模糊因 canvas 未适配高 DPI,应设宽高并禁用拉伸;批量静态页用 Python qrcode 库生成图片,配合 python -m http.server 托管。

直接用 qrcode.js 在页面里生成 QR 码最稳,别碰“把 HTML 转成二维码”这种伪需求——你扫的不是网页文件,是 URL 字符串;想扫码打开页面,就该生成指向该页面的链接二维码,而不是把整个 HTML 源码塞进去。
qrcode.js 初始化报 QRCode is not defined 怎么办
这是脚本加载时机错了。库没载入完,new QRCode() 就执行了。
- 确保
<script src="qrcode.min.js"></script>放在<body>底部,或加defer属性 - 别在
DOMContentLoaded之前调用,更别写在<head>里直接执行 - 如果用了
async,必须等QRCode全局变量存在再初始化,比如:if (typeof QRCode !== 'undefined') { new QRCode(...) } - 用 ES Module 方式(
import { QRCode } from 'qrcode')时,确保模块已 resolve,且调用在document.getElementById('container')返回有效 DOM 节点之后
扫码后白屏或 404,URL 是对的但打不开
根本不是二维码画错了,而是目标地址不可访问或路径解析错位。
- 绝对禁止用
file://协议双击打开 HTML——手机扫码会拒绝加载,白屏或报failed to load resource - 目标 URL 必须是完整可访问地址,如
https://example.com/page.html?id=123,不能只写page.html或./page.html - 若页面带查询参数,得手动拼全:
window.location.origin + window.location.pathname + window.location.search -
<img src="./style.css">这类相对路径,在扫码跳转后会以扫码设备当前 URL 为基准解析,极易 404;建议全部用绝对路径或<base href="/>
二维码生成后模糊、偏小、或 logo 覆盖失败
本质是 canvas 渲染密度和容器尺寸不匹配,不是库的问题。
立即学习“前端免费学习笔记(深入)”;
-
qrcode.js默认输出 canvas,但未适配高 DPI 屏幕;解决方法:初始化时传{ width: 256, height: 256, correctLevel: QRCode.CorrectLevel.H },并给容器设 CSSwidth: 256px; height: 256px;,避免拉伸 - 想加 logo,别直接往 canvas 上 drawImage——
qrcode.js不支持;改用qrcode-generator+ SVG 模式,或用html2canvas截图合成(但体积大、兼容差) - 容错率选
H(最高)时,内容长度超过约 2KB,手机扫描成功率断崖下跌;超长文本建议先短链,再生成二维码 - 别用
display: none隐藏二维码容器——部分扫码器不触发重绘,导致 canvas 内容为空白
要批量生成静态落地页带内嵌二维码,Python 怎么写
适合做设备说明书、活动单页等离线场景,关键在路径拼接和本地服务启动。
- 用 Python 的
qrcode库生成图片:img = qrcode.make('https://example.com/page?id=1'); img.save('qr_1.png') - HTML 模板里用绝对路径引用:
<img src="qr_1.png" alt="QR">,不要用../或变量插值 - 路径拼接务必用
os.path.join('output', 'page1.html'),硬拼'./output/' + name + '.html'在 Windows 下会出错 - 生成完别双击打开——仍走
file://;统一用python3 -m http.server 8000启服务,然后访问http://localhost:8000/page1.html - HTML 必须含
<meta name="viewport" content="width=device-width, initial-scale=1">,否则扫码后布局崩塌、文字挤成一团
最常被忽略的点:二维码本身只是个字符串载体,它不负责网络可达性、路径合法性、视口适配或资源加载顺序。问题八成出在 URL 构造和托管方式上,而不是生成逻辑。



















