Chrome 外网访问本地 Lodop 打印服务完整解决方案

前端打印代码里

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

问题分析

  1. 跨域限制:浏览器禁止 HTTP 页面访问本地 loopback 地址
  2. 安全策略:Chrome 要求访问本地服务必须是 HTTPS 或明确允许的不安全源
  3. Lodop 特性:作为本地客户端软件,必须在每个用户电脑上安装

解决方案:启用 Chrome 安全设置

核心思路

通过 Chrome 的 Insecure origins treated as secure 设置,允许特定 HTTP 域名访问本地服务。

详细步骤

步骤 1:打开 Chrome 实验性功能页面
  1. 打开 Chrome 浏览器

  2. 在地址栏输入:

    复制代码
    chrome://flags/#unsafely-treat-insecure-origin-as-secure
步骤 2:启用并配置
  1. 找到 "Insecure origins treated as secure" 选项

  2. 从默认的 "Disabled" 改为 "Enabled"

  3. 在下方的输入框中添加你的域名:

    复制代码
    http://example.com:8888
  4. 如果需要多个域名,用逗号分隔:

    复制代码
    http://example.com:8888,http://other-domain.com:8080
步骤 3:重启浏览器

点击右下角的 "Relaunch" 按钮,Chrome 会自动重启使设置生效。

亲测可用!!

相关推荐
IT民工郑小江1 个月前
关于谷歌内核的浏览器不能使用 Lodop 打印的解决方案
lodop
不老刘6 个月前
基于clodop和Chrome原生打印的标签实现方法与性能对比
前端·chrome·claude·标签打印·clodop