前端打印代码里
javascript
if (lodopPrint.getLodop()) {
LODOP = lodopPrint.getLodop();
let count = LODOP.GET_PRINTER_COUNT();
} else {
notification.error({
description: '请启动打印软件',
duration: 5,
message: <span style={{ color: '#f00' }}>Error</span>,
style: { color: '#f00' }
})
}
lodopPrint.getLodop()这句判断,用外网 IP 或域名访问时会返回 false,查看浏览器控制台输出,会看到:
'http://localhost:18000/CLodopfuncs.js?priority=0' from origin
'http://example.com:8888' has been blocked by CORS policy: The
request client is not a secure context and the resource is in
more-private address space
loopback
问题背景
当 Web 应用部署在外网服务器(如 http://example.com:8888),但打印功能依赖用户本地的 Lodop 客户端时,浏览器会因安全策略阻止跨域访问 localhost:18000,导致 getLodop() 返回 false。
问题分析
- 跨域限制:浏览器禁止 HTTP 页面访问本地 loopback 地址
- 安全策略:Chrome 要求访问本地服务必须是 HTTPS 或明确允许的不安全源
- Lodop 特性:作为本地客户端软件,必须在每个用户电脑上安装
解决方案:启用 Chrome 安全设置
核心思路
通过 Chrome 的 Insecure origins treated as secure 设置,允许特定 HTTP 域名访问本地服务。
详细步骤
步骤 1:打开 Chrome 实验性功能页面
-
打开 Chrome 浏览器
-
在地址栏输入:
chrome://flags/#unsafely-treat-insecure-origin-as-secure
步骤 2:启用并配置
-
找到 "Insecure origins treated as secure" 选项
-
从默认的 "Disabled" 改为 "Enabled"
-
在下方的输入框中添加你的域名:
http://example.com:8888 -
如果需要多个域名,用逗号分隔:
http://example.com:8888,http://other-domain.com:8080
步骤 3:重启浏览器
点击右下角的 "Relaunch" 按钮,Chrome 会自动重启使设置生效。
亲测可用!!